如何接收鼠标移动消息?

zjfhgdx 2010-12-15 03:03:15
将setmousetrack(true)后,也不能实时获得鼠标消息。请问怎么做。
我需要在鼠标移动的时候显示坐标。
我用的是ubuntu系统。

请指教,谢谢!
...全文
306 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruik2080 2010-12-17
  • 打赏
  • 举报
回复
之前也遇到过需要先setMouseTracking(false);再setMouseTracking(true);
中才德创 2010-12-16
  • 打赏
  • 举报
回复
学习了,如下代码,还真管用
setMouseTracking(false);
setMouseTracking(true);
void MainWindow::mouseMoveEvent(QMouseEvent *m)
{
qDebug("X=%d, Y=%d", m->x(), m->y());
qDebug("globalX=%d, globalY=%d", m->globalX(), m->globalY());
}
dext 2010-12-16
  • 打赏
  • 举报
回复
ui->centralWidget()->setMouseTracking(TRUE);
zjfhgdx 2010-12-15
  • 打赏
  • 举报
回复
因为我主要是搞MFC的,所以有些机制上的东西有点混,不好意思了。
那么如果像你所说它有一个widget覆盖了整个窗口,那么我如何实现mousemove事件呢?
dbzhang800 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zjfhgdx 的回复:]

引用 7 楼 dbzhang800 的回复:
引用 6 楼 zjfhgdx 的回复:

把这句去掉就正常 ui->setupUi(this); 这是为什么啊?

不是告诉你了么,空间都被其他东西占了。

题外:
不妨告诉大家你要做什么,因为MainWindow就是用来容纳其他widget的。没有其他widgets;你的MainWindow也没什么用,放上其他widgets,显然你……
[/Quote]

多看看manual吧!

一个MainWindow 有一个中心Widget,围绕中心Widget一般会有以下widgets:菜单栏,工具栏、状态栏、以及一系列的停靠窗口。这些东西就占据了几乎整个 MainWindow。(当然,你这儿的实验也印证了这一点)


而你提到的 "一个文本框,只占了一小部分空间", 我想你是在说"中心Widget上有一个文本框,只占了中心Widget一小部分空间"!

zjfhgdx 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dbzhang800 的回复:]
引用 6 楼 zjfhgdx 的回复:

把这句去掉就正常 ui->setupUi(this); 这是为什么啊?

不是告诉你了么,空间都被其他东西占了。

题外:
不妨告诉大家你要做什么,因为MainWindow就是用来容纳其他widget的。没有其他widgets;你的MainWindow也没什么用,放上其他widgets,显然你的鼠标事件都被其他widgets截住了
[/Quote]
我的mainwindow上只有一个文本框,只占了一小部分空间
  • 打赏
  • 举报
回复
用任意空的部件试试,Dialog,Widget,MainWindow,不放任何控件
dbzhang800 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zjfhgdx 的回复:]

把这句去掉就正常 ui->setupUi(this); 这是为什么啊?
[/Quote]
不是告诉你了么,空间都被其他东西占了。

题外:
不妨告诉大家你要做什么,因为MainWindow就是用来容纳其他widget的。没有其他widgets;你的MainWindow也没什么用,放上其他widgets,显然你的鼠标事件都被其他widgets截住了
zjfhgdx 2010-12-15
  • 打赏
  • 举报
回复
把这句去掉就正常 ui->setupUi(this); 这是为什么啊?
zjfhgdx 2010-12-15
  • 打赏
  • 举报
回复
哦,刚才又试了下,发现只有在鼠标移出窗口的时候才会触发鼠标消息
zjfhgdx 2010-12-15
  • 打赏
  • 举报
回复
不是的,我的mainwindow上只有一个文本框,只占了一小部分空间
dbzhang800 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zjfhgdx 的回复:]

只能在进入窗口和移出窗口的时候获得这个消息
[/Quote]
存在一些概念上的问题!


ui->setupUi(this);

可以猜到你的MainWindow上面有很多其他widget,
他们占据了MainWindow的绝大部分空间,可能边界部分没被占

所以你的鼠标事件边界处可以相应
zjfhgdx 2010-12-15
  • 打赏
  • 举报
回复
只能在进入窗口和移出窗口的时候获得这个消息
zjfhgdx 2010-12-15
  • 打赏
  • 举报
回复

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
bSaved=false;
setMouseTracking(TRUE);
}
void MainWindow::mouseMoveEvent(QMouseEvent *m)
{

QMessageBox::warning(this,tr("aa"),tr("aa"),tr("aa"));
}

16,225

社区成员

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

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