gpt4 book ai didi

qt - 像过滤事件一样过滤 Qt 信号

转载 作者:行者123 更新时间:2023-12-04 13:15:17 25 4
gpt4 key购买 nike

使用 Qt,我可以过滤所有 QEvent我的应用程序通过以下方式接收或产生的事件:

qApp.installEventFilter(my_filter_object)

有没有办法过滤Qt 信号 (来自 signals and slots )以类似的方式我可以过滤 QEvent事件?

QtCore.QStateMachine.SignalEvent 延伸 QEvent , 和 StateMachineSignal QEvent.Type 在那里,一切似乎都已就位,但我的事件过滤器似乎无法捕捉其中之一。

IOW,有没有办法为每个 QObject 的每个信号获取信号的名称(索引)、信号发射对象和传递的参数。在我的应用程序中没有明确连接到它?

谢谢!

最佳答案

不。用于监控信号的唯一通用 API 是 QSignalSpy ,但这需要与特定对象和信号的显式连接。唯一的另一件事是 TestLib 框架,它有一个 command-line option ( -vs ) 可以在测试运行期间输出所有发出的信号。但这似乎与您的要求相去甚远。

当然,您可以使用 QMetaObject列出 QObject 的所有信号并尝试明确监控一切。但前提是您可以获得对您可能感兴趣的所有对象的引用(并且您实际上可以提前知道它们将是什么)。

上述唯一的异常(exception)是通过 queued connection 发出的信号。 .这些信号通常是跨线程发出的,它们被包装在一个事件中并发布到接收者线程的事件队列中。可以通过过滤 QEvent.MetaCall 类型的事件来检测这些类型的信号。 .

但是,关联的事件对象的类型是 QMetaCallEvent ,这是一个内部 Qt 类,没有被 PyQt 包装。通常,这些对象会有 id() , sender() , signalId()args()方法。但是在 PyQt 中,你得到的只是一个普通的 QEvent ,因此没有关于发射信号的信息可用。

即使 QMetaCallEvent可用,但是,默认连接类型未排队 - 并且无法全局重置所有信号的默认值。

关于qt - 像过滤事件一样过滤 Qt 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33922831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com