Qt4-从不同线程更新gui

Qt4-从不同线程更新gui,qt4,pyqt,Qt4,Pyqt,在C#中,每当需要从另一个线程更新gui时,可以执行以下操作: control.Invoke(delegate() { // Do whatever you want in the gui thread here }); Qt4是否也有类似且简单的功能?(特别是PyQt4) 如果可能的话,我宁愿不进入信号、插槽,而是使用本机线程而不是QThread 从非qt(本机)线程更新Qt4 gui的最简单方法是什么?信号可以跨线程-这是它们的要点 一般来说,在Qt中,gui线程是唯一允许更新

在C#中,每当需要从另一个线程更新gui时,可以执行以下操作:


control.Invoke(delegate()
{

   // Do whatever you want in the gui thread here

});
Qt4是否也有类似且简单的功能?(特别是PyQt4)
如果可能的话,我宁愿不进入信号、插槽,而是使用本机线程而不是QThread


从非qt(本机)线程更新Qt4 gui的最简单方法是什么?

信号可以跨线程-这是它们的要点


一般来说,在Qt中,gui线程是唯一允许更新gui的线程,通常最简单的解决方案是让gui运行计时器并重新绘制自身,从工作线程中的函数或变量读取任何进度。

最简单的方法是根据状态使用信号和插槽

虽然QObject是可重入的,但GUI 类,尤其是QWidget及其所有 子类是不可重入的。他们 只能从主线程使用。 如前所述, QCoreApplication::exec()也必须是 从那条线中调用

通过使用可以从一个线程向另一个线程发送信号的队列,可以立即或延迟(通过队列)发送信号


如果没有信号,您必须实现自己的线程到线程通信,可能是另一个队列。

我不确定这是否比信号和插槽容易,但在某些情况下,我喜欢使用自定义事件

在一些
QObject
子类(如
MyObject
)中,您可以重写
customEvent()
)以基于一个自定义事件执行某些活动

您可以使用
QCoreApplication::postEvent()
从任何线程将自定义事件发布到
MyObject
。这需要调用者了解一些Qt。为了解决这个问题,我喜欢在
MyOjbect
上编写一个方法,用于封装创建自定义事件并将其发布到自身

发布是异步的,
customEvent()
中的执行在gui线程中运行

如果需要传入数据,可以使用setter和getter子类
QEvent

这是一个相当简短的概述,但文档应该会有所帮助。如果你有问题,我可以发布一些代码