Python 为什么';创建辅助对象QoObject时,QThread对象是否具有完成信号?
我知道有两种使用QThread的多线程方法,一种是子类化QThread并重写run()方法,另一种是创建QObject类并将其实例移动到QThread。据说后者是一种更好的做法 我发现子类化QThread确实提供了一个可以使用的Python 为什么';创建辅助对象QoObject时,QThread对象是否具有完成信号?,python,multithreading,pyqt,signals,qthread,Python,Multithreading,Pyqt,Signals,Qthread,我知道有两种使用QThread的多线程方法,一种是子类化QThread并重写run()方法,另一种是创建QObject类并将其实例移动到QThread。据说后者是一种更好的做法 我发现子类化QThread确实提供了一个可以使用的finished方法,但是当创建一个单独的QObject作为工作线程时,QThread将不再发出finished信号。QThrean run方法似乎创建了一个事件循环,当重新实现时,该循环返回函数并发出一个finished信号。但是对于worker类,我们需要在QThre
finished
方法,但是当创建一个单独的QObject作为工作线程时,QThread将不再发出finished
信号。QThrean run方法似乎创建了一个事件循环,当重新实现时,该循环返回函数并发出一个finished
信号。但是对于worker类,我们需要在QThread对象上调用quit()
方法
这是正确的吗?它不会使子类化QThread的使用更灵活吗?当覆盖run方法时,逻辑将在那里实现,以便您可以知道它何时结束,但是在将QObject移动到QThread的情况下,无法确定QObject逻辑何时完成执行
另一种方法是创建一个完成的信号,当您考虑QObjtLogic结束时,
>因此,<代码>运行方法最初有一个Exchange方法,它创建一个事件循环,因此永远不会真正“结束”,除非调用<代码> CUTE()(/Cord>)方法。您建议创建自定义完成信号。调用quit()
如何?它完成事件循环并发出finished
信号?@Sherafati忘记模拟初始逻辑,一个解决方案是将完成的信号连接到调用QThread的quit方法的插槽。你的意思是我应该创建一个自定义完成信号,并在任何时候发出它,然后将其连接到QThread.quit()
?是否基本上需要手动终止QThread(通过调用quit)?如果它的事件循环从未停止呢?