根本不起作用。 我已启用鼠标跟踪,然后安装了事件过滤器,一切正常,但MouseMove事件除外。 请帮忙吗?
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
setMouseTracking(true);
installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
if(event->type() == QEvent::MouseMove)
{
QMouseEvent *mEvent = (QMouseEvent*)event;
qDebug() << mEvent->pos();
}
return false;
}
答案 0 :(得分:4)
这一行很奇怪,你要求this
过滤自己
installEventFilter(this);
如果Qt完全忽略自我过滤事件,我会感到惊讶
尝试使用此方法检测中央窗口小部件中的鼠标移动事件:
centralWidget()->installEventFilter(this);
centralWidget()->setMouseTracking(true);
或者,为了检测MainWidget中的鼠标移动事件,请在setMouseTracking(true)
上使用this
,而不是添加事件过滤器,重新实现mouseMoveEvent()
受保护的功能:
//In constructor:
setMouseTracking(true);
和
void MainWindow::mouseMoveEvent(QMouseEvent * event)
{
//do stuff here
event->reject(); //To avoid messing QMainWindow mouse behavior
}
答案 1 :(得分:2)
这是QT的另一个设计问题:eventFilter不会收到事件......除非你覆盖mouseMoveEvent并忽略那里的信号。
void mouseMoveEvent(QMouseEvent* e) override { e->ignore(); }
现在,可以使用eventFilter ......这通常是可取的,因为您可能有一些要与多个小部件一起使用的eventFilter类。
答案 2 :(得分:1)
QMainWindow的centralWidget位于MainWindow区域。 尝试将此代码添加到MainWindow构造函数
ui->centralWidget->setMouseTracking(true);
鼠标事件将首先出现在MainWindow上,然后发送到centralWidget。