QThread.start()的用法
时间: 2023-08-03 17:03:57 浏览: 150
qthread示例
QThread.start() 是 Qt 中启动线程的方法,它会创建一个新的线程,并在该线程中执行 QThread 的 run() 方法。
其用法如下:
```python
thread = QThread()
worker = Worker() # Worker 是一个继承自 QObject 的工作类,需要在 run() 方法中实现具体的工作逻辑
worker.moveToThread(thread) # 把 worker 对象移动到 thread 线程中
thread.started.connect(worker.run) # 开始执行 worker 的 run() 方法
thread.start() # 启动线程
```
在上述代码中,我们首先创建了一个 QThread 对象 `thread` 和一个 Worker 对象 `worker`。然后,我们通过 `worker.moveToThread(thread)` 将 `worker` 对象移动到 `thread` 线程中,这样 `worker` 对象的所有信号和槽都将在 `thread` 线程中执行。
接着,我们通过 `thread.started.connect(worker.run)` 将 `thread` 线程的 started 信号与 `worker` 对象的 run() 方法连接起来,这样当 `thread` 线程启动时,就会自动调用 `worker.run()` 方法。
最后,我们通过 `thread.start()` 启动线程。注意,QThread.start() 方法并不会直接调用 run() 方法,而是会发出 started 信号,然后由 Qt 的事件循环机制自动调用 run() 方法。
需要注意的是,QThread 的子类不应该直接调用 run() 方法,而是应该将它们的工作逻辑实现在一个单独的 QObject 中,并将该对象移动到线程中,然后在该对象的 run() 方法中调用它们的工作逻辑。这样做的好处是可以避免调用 QThread 的成员函数,从而保证线程安全。
阅读全文