0

我希望能够通过按下一个按钮或一个键来启用和禁用过滤整个 QMainWindow 上的鼠标点击,这将导致过滤开始。我想从一个类中启用事件过滤器,QMainWindow.

我希望能够在我的班级中有一个我们可以调用的事件过滤器MyWindow,根据我发现我应该创建一个新班级MouseFilter,重新定义eventFilter(QObject* object,QEvent* event)并将其安装在 myWindow

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    MyWindow w;
    w.installEventFilter(new MouseFilter());
    w.show();
    return a.exec();
}

有没有办法可以从我的对象内部实现事件过滤器?


解决方案

我想我可能把事情复杂化了。它就像子类化一样简单mousePressEvent

void MouseFilter::mousePressEvent(QMouseEvent * event){
    if(event->button() == Qt::RightButton){
        qDebug() << "Right-o";
    }
}
4

2 回答 2

1

我认为您正在寻找的是可以从内部覆盖的mousePressEventMyWindow

干杯,罗斯蒂斯拉夫。

于 2015-08-27T01:07:44.313 回答
1

事件过滤器用于过滤到达另一个对象的事件。事件处理程序允许您实现事件处理逻辑。事件过滤器也是一个事件处理程序,但它的工作原理是拦截事件,绑定到其他对象接收,并决定是否以及如何通过到目的地。

您想做的事情听起来就像您只是想实现一个事件处理程序。所以不需要事件过滤器。

当您想要阻止或转换事件,或改变某些您不能或不想覆盖其事件处理的对象的行为时,事件过滤器很有用。

于 2015-08-27T05:26:23.243 回答