当前位置: 代码迷 >> QT开发 >> 关于QEventFilter的疑问,该如何解决
  详细解决方案

关于QEventFilter的疑问,该如何解决

热度:121   发布时间:2016-04-25 05:01:59.0
关于QEventFilter的疑问
一个Qwidget A。里面有一个QStackedWidget。stackedWidget会控制显示很多QWdget
现在有一个需求。
我要在A上面过滤掉鼠标右键的Release事件、不论是点击子控件还是A本身还是stackedWidget。
在QWidget A上我安装了一个eventFilter

代码如下

bool AntsMenu::eventFilter(QObject *obj,QEvent *e)
{
if (obj == &menuWidget || obj == ui.label)
{
qDebug()<<"Class Name:"<<obj->metaObject()->className();
if (e->type() == QEvent::MouseButtonRelease)
{
qDebug()<<"Mouse Button Release!"<<AntsMenu::level;
QMouseEvent *eMouse = static_cast<QMouseEvent*>(e);
if (eMouse->button() == Qt::RightButton)
{
qDebug()<<"Mouse Right Button Release!"<<AntsMenu::level;
goBack();
return true;
}
}
}

return QWidget::eventFilter(obj,e);
}


点击到某些控件。。比如QComboBox,QlineEdit时,右键Release是不会打印的。。。。
难道eventFilter不能过滤率这个吗?
求解~~~

------解决方案--------------------
installfilter
------解决方案--------------------
你要的这些QComboBox,QlineEdit。installfilter木有哇?

------解决方案--------------------
你全都install一下啊~不install,QComboBox等控件的事件不会往上送到你的QStackedWidget。你的filter自然就不会捕获到事件啊。个人猜测。对了给我分
------解决方案--------------------
C/C++ code
         QList<QWidget *> widgets = menuWidget->findChildren<QWidget *>();         for (int i=0; i<widgets.size(); i++)         {             widgets[i]->installEventFilter(this);         }
------解决方案--------------------
探讨
引用:
C/C++ code


QList<QWidget *> widgets = menuWidget->findChildren<QWidget *>();

for (int i=0; i<widgets.size(); i++)
{
widgets[i]->installEventFilter(thi……



……
  相关解决方案