在 class 内过滤 Qt 中的鼠标点击

Filtering Mouse clicks in Qt within a class

我希望能够启用和禁用过滤鼠标点击我的整个 QMainWindow 按下按钮或键将导致过滤开始。我想从 class、QMainWindow.

中启用事件过滤器

我希望能够在我的 class 中有一个事件过滤器,我们可以调用 MyWindow,根据我的发现,我应该制作一个新的 class 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();
}

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


解决方案

我想我可能把事情复杂化了。它就像 subclassing mousePressEvent.

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

我认为您正在寻找的是 mousePressEvent,您可以从 MyWindow

中覆盖它

干杯, 罗斯蒂斯拉夫

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

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

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