PyQt5:如何将 QObject 移动到主线程?



我知道一般来说,QObject()实例应该在主线程中创建。我也知道 - 一旦创建 - 您可以将QObject()从主线程移动到另一个线程:

官方Qt文档可以在这里找到

# Worker-object approach
# -----------------------
# Note: these codelines execute in the main thread.
workerThread = QThread()
workerObj = WorkerObj()
workerObj.moveToThread(workerThread)

 
目前,我面临着完全相反的问题。我有一个在(非主(QThread中实例化的QObject()。我想将其移动到主线程,如下所示:

# Move a QObject() to the main thread
# ------------------------------------
# Note: these codelines execute in some QThread
myObj = QObject()
myObj.moveToThread(threading.main_thread())

我收到以下错误:

类型错误:moveToThread(self,QThread(:参数 1 具有意外的类型"_MainThread">

我可能会收到错误,因为主线程不是真正的QThread.我应该怎么做才能让它工作?


编辑:
显然答案在moveToThread()函数的文档中是正确的。这很尴尬。我真诚地道歉。下次我会更加小心。


当然,可以在任何线程中创建QObject实例。它们是,如果没有它,Qt将毫无用处。您要查找的是全局应用程序对象及其线程:

myObj = QObject()
mainThread = QCoreApplication.instance().thread()
myObj.moveToThread(mainThread)

moveToThread调用之后,从当前线程调用对象上的任何非线程安全方法是未定义的行为。通过此调用,只能从目标线程安全地使用对象的非线程安全方法。

相关内容

  • 没有找到相关文章

最新更新