在我的应用程序中,我们在信号插槽之间建立了简单的连接。
connect(&A, SIGNAL(signal(myObject)), &B, SLOT(slot(myObject));
不幸的是,此连接将导致递归。然后我们将其更改为
connect(&A, SIGNAL(signal(myObject)), &B, SLOT(slot(myObject)), Qt::QueuedConnection);
,它不再起作用。该插槽永远不会被调用。
我尝试将myObject
更改为QString
,它可以正常工作。因此问题出在myObject
中,Qt不太喜欢。
我检查了Class Qt.ConnectionType,Signals & Slots和QObject doc,寻找了Qt::QueuedConnection
,但没有找到适合我的情况的说明。
关于我的代码的一些注释:
myObject
在信号发出后立即被破坏。但这不是问题,可以进行复制(就像我想的那样,对于QString,这不是问题,我的意思是,即使我通过了一个临时QString
并在发出{信号,无论如何都会调用该插槽)
myObject
不是QObject
,并且没有成员是QObject
(如果可以产生影响)
myObject
可以复制
我的应用程序是单线程
myObject
没有默认的构造函数(但我不认为它会影响它,因为可以进行复制)
我正在使用Qt 5.7
有人对此问题有澄清吗?
实际上,Qt::QueuedConnection
的文档似乎不太详细,请参阅我上面发布的链接。您还有一些更有用的链接吗?
答案 0 :(得分:3)
通过以下方式注册myObject:
qRegisterMetaType<MyObject>("myObject");
其中MyObject是类名。 doc
在Qt :: QueuedConnection之间,用于通过线程进行连接,您正在使用线程吗?