Qt :: QueuedConnection不适用于某些对象

时间:2018-07-27 13:18:48

标签: c++ qt queued-connection

在我的应用程序中,我们在信号插槽之间建立了简单的连接。

    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.ConnectionTypeSignals & SlotsQObject doc,寻找了Qt::QueuedConnection,但没有找到适合我的情况的说明。

关于我的代码的一些注释:

  • myObject在信号发出后立即被破坏。但这不是问题,可以进行复制(就像我想的那样,对于QString,这不是问题,我的意思是,即使我通过了一个临时QString并在发出{信号,无论如何都会调用该插槽)

  • myObject不是QObject,并且没有成员是QObject(如果可以产生影响)

  • myObject可以复制

  • 我的应用程序是单线程

  • myObject没有默认的构造函数(但我不认为它会影响它,因为可以进行复制)

  • 我正在使用Qt 5.7

有人对此问题有澄清吗?

实际上,Qt::QueuedConnection的文档似乎不太详细,请参阅我上面发布的链接。您还有一些更有用的链接吗?

1 个答案:

答案 0 :(得分:3)

通过以下方式注册myObject:

qRegisterMetaType<MyObject>("myObject");

其中MyObject是类名。 doc

在Qt :: QueuedConnection之间,用于通过线程进行连接,您正在使用线程吗?