我有以下小部件的层次结构:
root (QWidget)
|-> first child (QWidget)
|---> label A (QLabel)
|---> label B (QLabel)
|-> second child (QButton)
|-> third child (QButton)
我想要实现的是接收鼠标释放事件first child
(或两者label A
,label B
无论如何行为都是一样的)
我尝试使用事件过滤器
MyWidget(QWidget* parent) : QWidget(parent) {
setupUi(this);
// some other stuff
mFirstChild->installEventFilter(this);
}
bool MyWidget::eventFilter(QObject* object, QEvent* event) {
if (event->type() == QEvent::MouseButtonRelease) {
// do stuff
return true;
}
return QWidget::eventFilter(object, event);
}
我的问题是我的测试doStuff()
方法永远不会被调用。我正确接收到 Enter、Leave、Repaint、MousePress、MouseDblClick 等事件,但我从未得到 MouseRelease(顺便说一下 MouseMove)。我在这里遗漏了一些明显的东西吗?
编辑:经过更多研究,我尝试使用WA_TransparentForMouseEvents
属性,它没有改变任何东西。