求教:Qt如何 限制鼠标移动范围?

嵌入式乌托邦 2013-08-16 10:05:41
想实现鼠标移动限制在本窗口的效果(480*272),移出窗口后鼠标移不出去。
测试了下,窗口添加了this->setMouseTracking(true);
重写了移动事件
void Parent::mouseMoveEvent(QMouseEvent *event)
{
QPoint pos;
qDebug()<<"x="<<event->x()<<" "<<"y="<<event->y();//局部
pos = QCursor::pos();
qDebug()<<"x:"<<pos.x()<<" "<<"y:"<<pos.y();//全局

QPoint cur;
if((event->pos().x()>450)||(event->pos().y()>250))
{
qDebug()<<"######";
QCursor p;
p.setPos(240,136);//回到中间位置
}
}
为什么我移到超过450或250后,没有出现鼠标回到中间位置?
...全文
1458 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qtcreatorlinux 2013-08-22
  • 打赏
  • 举报
回复
那你是在什么系统下工作的那,可以考虑借用 其他的开发语言来实现光标的位置,我在mac下,有Qt解决不了的问题都是用objective -c 解决的
嵌入式乌托邦 2013-08-21
  • 打赏
  • 举报
回复
引用 7 楼 qtcreatorlinux 的回复:
嘿嘿,又找到个方法 再试试吧
QApplication::desktop()->cursor().setPos(this->mapToGlobal(QPoint(100, 100)));
还是一样。。。
qtcreatorlinux 2013-08-16
  • 打赏
  • 举报
回复
贴上我的测试代码希望对你有帮助
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(event->type() == QEvent::HoverMove) //鼠标在窗体中移动
    {
        qDebug()<< "hoverMove" << ((QHoverEvent*)event)->pos();
    }
    if(event->type() == QEvent::HoverLeave) //鼠标离开窗体
    {
        qDebug()<< "mapToParent"<<this->mapToParent(QPoint(100, 100));
       //QCursor setPos的坐标是相对全局坐标
        QCursor::setPos(this->mapToGlobal(QPoint(100, 100)));
    }
     return QMainWindow::eventFilter(obj, event);
}
qtcreatorlinux 2013-08-16
  • 打赏
  • 举报
回复
方法用错了 试试这个
QCursor::setPos(this->mapToGlobal(QPoint(100, 100)));
qtcreatorlinux 2013-08-16
  • 打赏
  • 举报
回复
嘿嘿,又找到个方法 再试试吧
QApplication::desktop()->cursor().setPos(this->mapToGlobal(QPoint(100, 100)));
嵌入式乌托邦 2013-08-16
  • 打赏
  • 举报
回复
引用 4 楼 qtcreatorlinux 的回复:
从你的分析中,觉得你那边是不是 QCursor::setPos 这个函数不起作用啊
是啊,其实这个效果跟用mouseMoveEvent一样的,也是QCursor::setPos设置了但是不见反应。
qtcreatorlinux 2013-08-16
  • 打赏
  • 举报
回复 1
那只能用猜的了,我的工作正常 ,我的是在mac上Qt5.1上测试的 尝试1:在判断里加个 return true; 试试 尝试2:在鼠标移出窗体的同时执行 {hide(); show(); raise() } 尝试3:在重新建立个工程 另在附上一连接: http://stackoverflow.com/questions/13398553/x11-limit-mouse-movements 好象跟你的很像啊
qtcreatorlinux 2013-08-16
  • 打赏
  • 举报
回复
从你的分析中,觉得你那边是不是 QCursor::setPos 这个函数不起作用啊
嵌入式乌托邦 2013-08-16
  • 打赏
  • 举报
回复
谢谢qtcreatorlinux的回复。我按你的方法试了下,添加了过滤,也能检测到鼠标出窗口和在窗口,但是还是能移出窗口,并且鼠标不停的闪烁,并没有回到(100,100)的位置啊。QCursor::setPos(this->mapToGlobal(QPoint(100, 100)));这句貌似没起到作用。打印信息显示在移出窗口后是将鼠标移至100,100了,但实际显示却没有啊。

16,229

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧