关于QEventFilter的疑问

myseemydog 2012-01-18 02:06:16
一个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不能过滤率这个吗?
求解~~~
...全文
152 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qixing1115 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 myseemydog 的回复:]
引用 6 楼 wangxkww 的回复:
C/C++ code


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

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



……
[/Quote]

这个应该有
myseemydog 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qixing1115 的回复:]
引用 7 楼 myseemydog 的回复:
引用 6 楼 wangxkww 的回复:
C/C++ code


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

for (int i=0; i<widgets.size(); i++)
{
widgets[i]->installE……
[/Quote]


比如说我有一个控件是QWidget里面加一个layout。然后再添加一个有layout的Qwidget到里面。一直循环这么做。那我在最外面一层的QWidget上面添加事件过滤器。要用这样找孩子的方法。。。。???!!!!
myseemydog 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangxkww 的回复:]
C/C++ code


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

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


这么麻烦。。。。。我试试好了
wangxkww 2012-01-18
  • 打赏
  • 举报
回复

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

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

stackedWidget上的子控件也需要install一下,试试
lilinfeng127 2012-01-18
  • 打赏
  • 举报
回复
你全都install一下啊~不install,QComboBox等控件的事件不会往上送到你的QStackedWidget。你的filter自然就不会捕获到事件啊。个人猜测。对了给我分
myseemydog 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lilinfeng127 的回复:]
你要的这些QComboBox,QlineEdit。installfilter木有哇?
[/Quote]
这些都是QstackedWidget上面的控件挖。。。
lilinfeng127 2012-01-18
  • 打赏
  • 举报
回复
你要的这些QComboBox,QlineEdit。installfilter木有哇?
myseemydog 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lilinfeng127 的回复:]
installfilter
[/Quote]

ui.label->installEventFilter(this);
menuWidget.installEventFilter(this);
这个已经写了。。。一个是label一个是QStackedWidget。
lilinfeng127 2012-01-18
  • 打赏
  • 举报
回复
installfilter

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧