Qt - 有选择地允许单击进入较低的应用程序窗口

dte*_*ech 6 qt event-handling mouseevent qml

即使在 Qt 应用程序中,是否也可以接收鼠标单击,对其进行评估,并在必要时让它落入 Qt 应用程序窗口下方可能发生的任何内容?

请注意,这Qt::WA_TransparentForMouseEvents并不利于在传递点击之前对其进行评估。

而且由于点击评估包含了一些动态逻辑,因此也不适用于设置静态遮罩,除此之外还会产生视觉影响。

理想情况下,我想要一种有选择地允许鼠标单击以平台可移植方式穿过应用程序窗口的方法,最好是从 QML 进行,而不需要引入小部件模块,或者至少不涉及深入研究私有 C++ 内部 API 。

Rei*_*ica 2

Qt::WA_TransparentForMouseEvents用于过滤掉鼠标事件。这个名字有点用词不当:它允许本来会消耗鼠标事件的小部件,而不是消耗它们。例如,您可以使按钮不注意到任何鼠标事件。如果您正在编写自定义小部件,则永远不需要此属性,因为您需要检查鼠标事件而不是处理它们:它们会自动传递给父小部件。

但所有这些都无关紧要,因为这些WA_属性是针对小部件的,对窗口没有任何作用。您完全想要其他东西:使窗口本身对于输入透明。因此,在 QML 中:

window.flags = window.flags | Qt.WindowTransparentForInput
Run Code Online (Sandbox Code Playgroud)

  • 预计这会使窗口及其所有内容无法接收任何事件。我需要接收事件,并决定是否要让它们失败。 (2认同)