[英]Qt MouseMove event not being caught in eventFilter()
它根本不起作用。 我启用了鼠标跟踪,然后安装了事件过滤器,除了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;
}
这条线很奇怪,您要求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
}
这是QT的另一个设计问题:eventFilter将不会接收事件...除非您重写mouseMoveEvent并忽略那里的信号。
void mouseMoveEvent(QMouseEvent* e) override { e->ignore(); }
现在,可以使用eventFilter ...这通常是理想的,因为您可能要使用多个小部件使用一些eventFilter类。
QMainWindow具有位于MainWindow区域上方的centralWidget。 尝试将代码添加到MainWindow构造函数
ui->centralWidget->setMouseTracking(true);
鼠标事件将首先到达MainWindow,然后到CentralWidget。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.