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