调试Qt信号,插槽和连接
问题描述:
有没有办法查看哪些信号被触发,以及是否有插槽连接到它们?理想情况下,我们希望看到所有信号,而不仅仅是特定类别或方法的信号。例如QSignalSpy只允许我们跟踪特定实例的特定信号。调试Qt信号,插槽和连接
在我们的应用程序中,我们发现性能问题是由于信号从不同组件发出两次。最后,事实证明,应该只有一次这种类的第二个实例。知道发射哪些信号恰好有助于调试。
信号通过QMetaObject::invoke*
调用,我希望能找到某些东西来挂钩,但我没有发现任何明显的信号。
答
答
(免责声明,我的工作KDAB):KDAB的GammaRay tool可以在运行时显示你的对象和连接,而不需要任何来源的变化。它检查元对象表并执行一些代码注入挂钩以使其工作。
+1
我从git repo构建了GammaRay,但无法找到连接显示的位置(使用Qt 5.7构建);信号面板只显示发射抽动。我可以做的最好的替代方法是在qobject.cpp中删除对QT_DEBUG的检查,并调用dumpObjectInfo()来查看对象的所有信号/插槽连接,否则它不打印我的-debug-and-release配置的Qt build 。 – 2017-01-07 21:57:26
可能重复[如何拦截QT中给定事件发出的所有信号?](http://stackoverflow.com/questions/2072013/how-to-intercept-all-signals-emitted-by-a- given-event-in-qt) – exilit 2014-10-16 07:36:52
如果你想只有一个类的实例,为什么不使用单例模式来控制对象的数量? – Afshin 2016-05-07 13:23:15