为什么 QThread 对象在创建 worker QObject 时没有完成信号?

Why doesn't the QThread object have a finished signal when creating a worker QObject?

我知道有两种使用QThreads的多线程方法,一种是subclass QThread并覆盖运行()方法,另一种是创建一个QObject class 并将它的实例移动到 QThread。据说后者是更好的做法。

我发现 subclassing QThread 确实提供了一个可以使用的 finished 方法,但是当创建一个单独的 QObject 作为工作线程时,QThread 将不再发出 finished 信号。似乎 QThrean 运行 方法创建了一个事件循环,当它被重新实现时,returns 函数并发出一个 finished 信号。但是对于工人 class 的情况,我们需要在 QThread 对象上调用 quit() 方法。

这是正确的吗?不是让subclassing QThread使用起来更灵活吗?

当 运行 方法被覆盖时,逻辑在那里实现,因此您可以知道它何时结束,但是在将 QObject 移动到 QThread 的情况下,无法确定 QObject 逻辑何时结束执行完毕。

另一种方法是创建一个完成信号,在您认为 QObject 逻辑结束时发出该信号。