簡體   English   中英

Qt MouseMove事件未在eventFilter()中捕獲

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM