简而言之,我正在尝试记录和回放本机窗口事件以进行测试,因为对常规
QEvent
进行相同的操作感觉不可行,因为它需要快速场景中的每个 QObject
都有一个独特的 QObject::name
,这应该每次运行时都会以相同的方式重新分配。
当涉及视图(甚至是树视图)并且所有可见的东西都是一个项目时,这很容易失控。
所以我们的想法是跟踪本机窗口事件,这可以通过
QCoreApplication::installNativeEventFilter
实现。
然而,对于重新注射来说,情况就完全不同了。 通过深入研究 Qt 源代码,我最终找到了
QWindowSystemEventHandler
这似乎是我所需要的。
虽然是私有标头,但它似乎是一个可以轻松调用的公共静态 API,也在QWindowSystemInterfacePrivate::installWindowSystemEventHandler
中。
问题是我不知道如何从 PySide2 访问它。这是否可能,如果不可能,是否有其他方法可以做到这一点?
如果没有,原则上我可以修改 PySide2 包装器以公开这些类并重建它吗?
经过一些研究,似乎实现我要求的最简单方法是创建一个自定义模块及其绑定,如 https://www.kdab.com/creating-python-bindings-for 中所述-qt-libraries/ 和 https://doc.qt.io/qtforpython-5/shiboken2/examples/samplebinding.html