如何在Qt中将Click事件传递给下面的兄弟

如何在Qt中将Click事件传递给下面的兄弟

本文介绍了如何在Qt中将Click事件传递给下面的兄弟?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个窗口中子A和子B中有两个重叠的小部件。子A位于B上方并获得鼠标事件,但有时点击应该通过并最终命中子B。

理想的解决方案是使用event->ignore(),但这会将事件传递给父小部件,而不是同级小部件。

"全部传递"解决方案setAttribute(Qt::WA_TransparentForMouseEvents);也不起作用,因为子级A需要捕获某些事件。

如何告诉Qt"我不想处理此事件,就像我不在那里一样"?

推荐答案

更简单的解决方案(如果适用)是根据您的点击条件设置WA_TransparentForMouseEvents

例如,如果您想点击Child-A的某些区域,可以使用其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事件传递给下面的兄弟?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-25 22:00