Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何安装事件筛选器_C++_Qt_Events - Fatal编程技术网

C++ 如何安装事件筛选器

C++ 如何安装事件筛选器,c++,qt,events,C++,Qt,Events,我在另一个自定义小部件B中有一个自定义小部件a。小部件a通常有一个mousePressEvent,我在其中打开一个上下文菜单。但是现在在小部件B中,我想打开小部件B的上下文菜单并截取事件,以便只有B知道它 如果在将A的实例添加到B后在类B中使用此代码: this->installEventFilter(instanceOf_A); 或 在哪里 什么都不管用。同时返回false,e->accept,e->ignore不工作或显示任何影响。如何设置eventFilter?哪里A区还是B区 编

我在另一个自定义小部件B中有一个自定义小部件a。小部件a通常有一个mousePressEvent,我在其中打开一个上下文菜单。但是现在在小部件B中,我想打开小部件B的上下文菜单并截取事件,以便只有B知道它

如果在将A的实例添加到B后在类B中使用此代码:

this->installEventFilter(instanceOf_A);

在哪里

什么都不管用。同时返回false,e->accept,e->ignore不工作或显示任何影响。如何设置eventFilter?哪里A区还是B区


编辑:替换了e->MouseButtonPress

我删除了我的答案,因为我似乎误解了什么。是的,我在你的代码中提到了一个很大的错误,但这还不足以解决问题。对不起,没问题,谢谢你的时间!当我想到它的时候。。。你甚至不需要事件过滤器,只需根据A是独立的还是在B中来处理事件。不用说,不仅B知道它,而且它将是偶数触发动作的地方,A服务只是为了重定向事件,以防它是B的子级。现在我想也是这样。我不需要过滤器。但是我认为a如果我在a或B上安装它没有什么区别,除非它是相同的过滤器,只有对象名称改变,B与链接的示例代码相反,在这两种情况下,小部件a的mousePressEvent在eventFilter之前被调用。我不明白,为什么。我希望eventFilter在小部件A自己的处理程序之前过滤它。
instanceOf_A->installEventFilter(this);
A::eventFilter(QObject *obj, QEvent *e){
    if (e->type() == QEvent::MouseButtonPress){
    QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e);
    if (mouseEvent->button() == Qt::RightButton){
        qDebug()<<"  Right mouse button press detected. \
                     Return true, now child should not get the mouse event";
        return true;
    }
}