在我的应用程序中,我们在信号槽之间建立了一个简单的连接。
connect(&A, SIGNAL(signal(myObject)), &B, SLOT(slot(myObject));
不幸的是,这种联系会导致递归。然后我们把它改成
connect(&A, SIGNAL(signal(myObject)), &B, SLOT(slot(myObject)), Qt::QueuedConnection);
它不再起作用了。该插槽永远不会被调用。
我尝试更改myObject
aQString
并且它按预期工作。所以问题myObject
在于Qt不太喜欢。
我检查了Class Qt.ConnectionType、Signals & Slots和QObject doc,寻找Qt::QueuedConnection
但我没有找到对我的情况的澄清。
关于我的代码的一些注释:
在
myObject
信号发射后立即破坏。但这不应该是一个问题,可以制作一个副本(就像我想的那样,QString 没有这个问题,我的意思是,即使我通过一个临时QString
的并在信号发射后立即销毁它,插槽无论如何都按预期调用)myObject
不是 aQObject
,并且它的成员中没有一个是 aQObject
(如果它可以产生一些影响)myObject
可以复制我的应用程序是单线程
myObject
没有默认构造函数(但我认为它不应该影响它,因为可以制作副本)我正在使用 Qt 5.7
有人对这个问题有一些澄清吗?
实际上,文档Qt::QueuedConnection
似乎没有那么详细,请参阅我上面发布的链接。你有一些更有用的链接吗?