我有stackedWidget,我想捕获他孩子的所有mouseClickEvents,独立于他们的类型。它们可以在以后添加和删除(从stackedWidget中删除,而不是删除)。我怎样才能使这项工作?
问问题
1208 次
2 回答
0
您可以在所有子小部件上安装事件过滤器,您的事件过滤器可以是新类或现有类,重要的是它实现了 eventFilter 方法并继承自 QObject
一个例子(从文档修改)
bool FilterObject::eventFilter(QObject *obj, QEvent *event)
{
if (obj == textEdit) {
if (event->type() == QEvent::mousePress) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
qDebug() << "Ate mouse press" << mouseEvent->x() << " " << mouseEvent->y();
return true;
} else {
return false;
}
} else {
// pass the event on to the parent class
return FilterObject::eventFilter(obj, event);
}
}
创建小部件后,执行以下操作以安装事件过滤器
FilterObject * filterObj = new FitlerObject(this);
Q_FOREACH(QObject obj, pWin->children())
{
obj->installEventFilter(filterObj);
}
您可以在http://qt-project.org/doc/qt-4.8/qobject.html#eventFilter和http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter找到完整的文档
于 2014-05-15T01:14:28.760 回答
0
这里解释一下如何获取子控件事件:
http://falsinsoft.blogspot.com/2014/04/qt-get-child-controls-events.html
基本上方法是已经建议的事件过滤器。然而,“问题”是如何安装过滤器,以防您的窗口 GUI 是通过 Qt Designer 工具管理的。在这种情况下,您无法直接控制创建子控件的代码,您需要使用替代方法来获取主对象的“ChildAdded”事件,以便在刚刚添加的每个新子控件中安装过滤器,如中所述上面的链接。
于 2014-06-03T07:19:23.417 回答