Qt::QueuedConnection 无法使用某些对象
Qt::QueuedConnection not working with some object
在我的应用程序中,信号槽之间有一个简单的连接。
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 and QObject doc,寻找 Qt::QueuedConnection
,但我没有找到对我的情况的说明。
关于我的代码的一些注释:
myObject
信号发出后立即销毁。但这应该不是问题,可能已经制作了一个副本(我想是针对 QString 的,这没有这个问题,我的意思是,即使我传递了一个临时 QString
并在发出后立即销毁它信号,插槽无论如何都按预期调用)
myObject
不是 QObject
,它的成员都不是 QObject
(如果它能产生一些影响的话)
myObject
可复制
我的应用程序是单线程
myObject
没有默认构造函数(但我认为它不会影响它,因为可以制作副本)
我正在使用 Qt 5.7
有人对这个问题有一些解释吗?
其实Qt::QueuedConnection
的文档好像没那么详细,看我上面贴的links。有没有更有用的link?
通过以下方式注册您的 myObject:
qRegisterMetaType<MyObject>("myObject");
其中 MyObject 是 class 名称。 doc
Between,Qt::QueuedConnection用于线程连接,您使用的是线程吗?
在我的应用程序中,信号槽之间有一个简单的连接。
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 and QObject doc,寻找 Qt::QueuedConnection
,但我没有找到对我的情况的说明。
关于我的代码的一些注释:
myObject
信号发出后立即销毁。但这应该不是问题,可能已经制作了一个副本(我想是针对 QString 的,这没有这个问题,我的意思是,即使我传递了一个临时QString
并在发出后立即销毁它信号,插槽无论如何都按预期调用)myObject
不是QObject
,它的成员都不是QObject
(如果它能产生一些影响的话)myObject
可复制我的应用程序是单线程
myObject
没有默认构造函数(但我认为它不会影响它,因为可以制作副本)我正在使用 Qt 5.7
有人对这个问题有一些解释吗?
其实Qt::QueuedConnection
的文档好像没那么详细,看我上面贴的links。有没有更有用的link?
通过以下方式注册您的 myObject:
qRegisterMetaType<MyObject>("myObject");
其中 MyObject 是 class 名称。 doc
Between,Qt::QueuedConnection用于线程连接,您使用的是线程吗?