[英]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.