记录排队的连接

时间:2015-02-17 15:42:23

标签: qt logging signals-slots qevent queued-connection

我正在使用Qt 5.4的复杂状态引擎系统构建(使用自定义状态引擎类)。

该代码的一部分是记录事件,转换等。对我来说,记录引擎/状态对象正在接收的所有事件非常重要,这样我就可以完全跟踪发生的事件。国家发动机。

对于大多数事件类型,日志记录很容易。但是我无法记录排队连接(即元呼叫事件)。 QMetaCallEvent是私有的,所以我无能为力。然而,很难相信Qt的这个组成部分无法正确检查。

我是否遗漏了一些允许记录排队连接的方法(如果可能,包括信号名称,插槽名称,发件人姓名,收件人姓名和参数)?

2 个答案:

答案 0 :(得分:0)

安装事件过滤器并使用ev-> type()== QEvent :: MetaCall拦截事件。调试器中可见所有成员。

是否需要访问私有标头?在.pro文件中使用QT + = core-private。

(音调模式="原创海报")很难相信没有人阅读文档(/音调)

答案 1 :(得分:0)

没有官方API可以执行我想要的操作。

检查QMetaCall事件(使用私有框架标头)是个坏主意。首先它们是私有的(并且可能随时破坏你的代码)第二,如果发件人被立即删除,QMetaCall事件sender()指针可能无效,在这种情况下我找不到干净的方法来检查事件。

我现在使用的方式完全不同。我没有检查到达的事件对象,而是使用QSignalSpy的修改变体,它允许比原始类更多,并帮助使用辅助连接记录信号发射。

在我的情况下,这似乎是可行的,即使它非常复杂而且不是通用的解决方案。至少不涉及私人标题。