1

在我的 Qt 应用程序中,我需要跟踪鼠标移动。为此,我创建了一个eventfilter并正确安装它,如下所示:

bool iArmMainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::MouseMove)//not working
    {
        iarm->printStatus("hi"); //this is for debugging

    }
    if (event->type() == QEvent::MouseButtonPress){
                //Here some staff working correctly
        }
//other staff
}

问题是事件类型 MouseMove 不起作用。

任何想法?

4

1 回答 1

8

您应该对 Qt 说,您想通过setMouseTracking()函数获取鼠标移动事件。请注意,您应该在安装过滤器之前调用它(例如在小部件子类的 c-tor 中)。我会向您推荐一种更简单的方法,而不是安装事件过滤器:只需在小部件的子类中覆盖QWidget::mouseMoveEvent()即可。像这样:

// header:
class MyWidget {
    ...
    void mouseMoveEvent( QMouseEvent * event );
};

// source:
MyWidget::MyWidget() {
    setMouseTracking(true);  //enables mouse tracking
}

void MyWidget::mouseMoveEvent( QMouseEvent * event ) {
    // do what you want
}
于 2013-05-06T11:25:33.810 回答