读书人

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

发布时间: 2012-04-07 17:31:51 作者: rapoo

关于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……



……

读书人网 >QT开发

热点推荐