繁体   English   中英

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

[英]PyQt5: How to move a QObject to the main thread?

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

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

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


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

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

我收到以下错误:

TypeError:moveToThread(self,QThread):参数1具有意外的类型'_MainThread'

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


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


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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM