Qt4-从不同线程更新gui
在C#中,每当需要从另一个线程更新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线程是唯一允许更新
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
这是一个相当简短的概述,但文档应该会有所帮助。如果你有问题,我可以发布一些代码