【问题标题】:Filtering Mouse clicks in Qt within a class在类中过滤 Qt 中的鼠标点击
【发布时间】:2015-08-27 00:57:09
【问题描述】:

我希望能够通过按下一个按钮或一个键来启用和禁用过滤整个 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";
    }
}

【问题讨论】:

    标签: c++ qt user-interface event-handling qmouseevent


    【解决方案1】:

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

    干杯, 罗斯蒂斯拉夫。

    【讨论】:

    • @STREBLO 太好了 :) 我认为您应该将您的主题标记为已回答,这样其他人就不会浪费时间查看它;)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多