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

Qt-有选择地允许点击进入较低的应用程序窗口,qt,event-handling,qml,mouseevent,Qt,Event Handling,Qml,Mouseevent,即使在Qt应用程序中也可能收到鼠标点击,对其进行评估,如果必要,让其进入Qt应用程序窗口下方的任何位置 请注意,Qt::WA_TransparentForMouseEvents不便于在传递单击之前对其进行评估 由于点击评估包含了一些动态逻辑,因此也不适用于设置静态掩码,除此之外还具有视觉效果 理想情况下,我希望能够有选择地允许鼠标点击以平台可移植的方式通过应用程序窗口,理想情况下是从QML通过,而无需引入widgets模块,或者至少,不涉及挖掘C++内部API。 < P>代码> QT::WAuP

即使在Qt应用程序中也可能收到鼠标点击,对其进行评估,如果必要,让其进入Qt应用程序窗口下方的任何位置

请注意,
Qt::WA_TransparentForMouseEvents
不便于在传递单击之前对其进行评估

由于点击评估包含了一些动态逻辑,因此也不适用于设置静态掩码,除此之外还具有视觉效果


理想情况下,我希望能够有选择地允许鼠标点击以平台可移植的方式通过应用程序窗口,理想情况下是从QML通过,而无需引入widgets模块,或者至少,不涉及挖掘C++内部API。

< P>代码> QT::WAuPuffeleTeFuffousEvss/Cuff>用于过滤鼠标事件。这个名字有点用词不当:它允许原本会使用鼠标事件的小部件,而不是使用它们。例如,您可以使按钮不注意任何鼠标事件。如果您正在编写一个自定义小部件,那么就永远不需要这个属性,因为这取决于您检查鼠标事件而不是处理它们:它们会自动传递给父小部件

但所有这些都无关紧要,因为
WA_
属性用于小部件,而不用于windows。您完全需要其他东西:使窗口本身对输入透明。因此,在QML中:

window.flags = window.flags | Qt.WindowTransparentForInput

预计这会使窗口及其所有内容无法接收任何事件。我需要接收事件,并决定是否让它们通过。您可以尝试,将人工事件发布到第二个窗口。我想你只需要转换坐标就可以了。我曾经做过一个实验(我认为是积极的结果),但我需要搜索它。这可以做到,但它不会是可移植的,也不会是原始事件,我发现在一些角落的情况下,对合成事件的反应不同,这是真的,对合成事件和本机事件的不同处理可能会非常麻烦。而且,由于我需要将事件提交给我无法控制的第三方专有应用程序,我真的更希望有一种更优雅的方式。在Qt本机中无法做到这一点。你需要在什么平台上使用它?这将需要一个Qt补丁,但这可能很容易做到。