C++ 如何安装事件筛选器
我在另一个自定义小部件B中有一个自定义小部件a。小部件a通常有一个mousePressEvent,我在其中打开一个上下文菜单。但是现在在小部件B中,我想打开小部件B的上下文菜单并截取事件,以便只有B知道它 如果在将A的实例添加到B后在类B中使用此代码: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区 编
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;
}
}