我知道通常应该在主线程中创建QObject()
个实例。我也知道 - 一旦创建 - 你可以将QObject()
从主线程移动到另一个:
官方Qt文档可以找到here
# 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()
函数in the documentation的正确答案。这非常令人尴尬。真诚的道歉。我下次会更加小心。
答案 0 :(得分:1)
public class FeaturedListing
{
public string Title { get; set; }
public string Link { get; set; }
public string Published { get; set; }
public int Views { get; set; }
public string ViewsStr { get { return string.Format("{0} visits", Views); } }
public string Featured { get; set; }
public string CategoryName { get; set; }
}
个实例。他们是,如果没有它,Qt将毫无用处。您正在寻找的是全局应用程序对象 - 及其主题:
QObject
在myObj = QObject()
mainThread = QCoreApplication.instance().thread()
myObj.moveToThread(mainThread)
调用之后,从当前线程调用对象上的任何非线程安全方法是未定义的行为。通过此调用,可以从目标线程安全地使用对象的非线程安全方法。