本文介绍了如何在Qt中将Click事件传递给下面的兄弟?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在一个窗口中子A和子B中有两个重叠的小部件。子A位于B上方并获得鼠标事件,但有时点击应该通过并最终命中子B。
理想的解决方案是使用event->ignore()
,但这会将事件传递给父小部件,而不是同级小部件。
"全部传递"解决方案setAttribute(Qt::WA_TransparentForMouseEvents);
也不起作用,因为子级A需要捕获某些事件。
如何告诉Qt"我不想处理此事件,就像我不在那里一样"?
推荐答案
更简单的解决方案(如果适用)是根据您的点击条件设置WA_TransparentForMouseEvents
。
mouseMoveEvent()
查看是否需要设置WA_TransparentForMouseEvents
。然后单击事件自动传递。如果在实际触发单击事件之前无法确定是否应接受该事件,则可以执行以下操作:
void ChildA::mousePressEvent(QMouseEvent* event) {
const bool accepted = ...; //insert custom logic here
if (accepted) {
... //handle event here
} else {
//not accepting event -> resend a copy of this event...
QMouseEvent* eventCopy = new QMouseEvent(*event);
QApplication::instance()->postEvent(eventCopy);
//...but this time, ignore it
setAttribute(Qt::WA_TransparentForMouseEvents, true);
QTimer::singleSlot(1, this, SLOT(resetClickTransparency()));
//don't propagate original event any further
event->accept();
}
}
void ChildA::resetClickTransparency() { //slot
setAttribute(Qt::WA_TransparentForMouseEvents, false);
}
免责声明:在一年不做Qt之后,所有这些都记在心上,所以请更正我的姓名或键入错误。
这篇关于如何在Qt中将Click事件传递给下面的兄弟?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!