C++ Qt:只能从GUI线程或QQuickItem::updatePaintNode计划更新

C++ Qt:只能从GUI线程或QQuickItem::updatePaintNode计划更新,c++,multithreading,qt,signals-slots,qquickitem,C++,Multithreading,Qt,Signals Slots,Qquickitem,如何从工作线程调用QQuickItem上的update(),而不引起以下警告 Updates can only be scheduled from GUI thread or from QQuickItem::updatePaintNode() 我想强制执行QQuickItem::updatePaintNode() 我尝试了将QObject::connect从工作线程挂接到调用MyQQuickItem->update()的插槽的解决方案但一切正常QQuickItem::updatePaintN

如何从工作线程调用
QQuickItem
上的
update()
,而不引起以下警告

Updates can only be scheduled from GUI thread or from QQuickItem::updatePaintNode()
我想强制执行
QQuickItem::updatePaintNode()

我尝试了将
QObject::connect
从工作线程挂接到调用
MyQQuickItem->update()
的插槽的解决方案但一切正常
QQuickItem::updatePaintNode()
在信号发出后被调用,
QQuickItem
以我想要的方式更新。但我在我安排的每次更新调用中都会收到此警告,我理解为您无法从工作线程更新UI。但是在Qt中没有警告的情况下怎么做呢

但是,我如何才能摆脱每次更新呼叫时收到的警告?

注意:我必须使用
Qt::DirectConnection
创建
QObject::connect
,因为
Qt::QueuedConnection
无法通过信号调用update


已选中。本链接中的讨论以对我在这里收到的相同警告的抱怨结束。我的问题是,我应该纠正什么来避免这个警告?

阅读以下内容:@eyllanesc我已经阅读了您提供的内容。正如我在问题中提到的,我理解不能从工作线程调用
update
。但我认为Qt信号槽会像链接中提到的那样处理这个问题?我也没有直接呼叫更新。它是通过信号槽的。如果使用
Qt::DirectConnection
,则在工作线程中调用该槽,则应使用
Qt::QueuedConnection
(或
Qt::AutoConnection
)。为什么它不工作?您确实应该注册它,以便能够在排队连接中使用它。根据,您应该始终通过引用传递它。必要时,Qt将负责创建一些副本(以实现异步行为/排队连接)。请阅读:@eyllanesc我已经阅读了您提供的内容。正如我在问题中提到的,我理解不能从工作线程调用
update
。但我认为Qt信号槽会像链接中提到的那样处理这个问题?我也没有直接呼叫更新。它是通过信号槽的。如果使用
Qt::DirectConnection
,则在工作线程中调用该槽,则应使用
Qt::QueuedConnection
(或
Qt::AutoConnection
)。为什么它不工作?您确实应该注册它,以便能够在排队连接中使用它。根据,您应该始终通过引用传递它。必要时,Qt将负责创建一些副本(以实现异步行为/排队连接)