qt多线程更新ui ,举例说明
时间: 2024-03-13 17:41:20 浏览: 136
多线程更新UI--不错的例子
4星 · 用户满意度95%
在Qt中,多线程更新UI是一种常见的需求,因为UI更新通常需要在主线程中进行,而耗时的操作则需要在子线程中执行,以避免阻塞主线程导致UI卡顿。下面是一种常见的实现方式:
1. 创建一个继承自QObject的子类,用于执行耗时操作并发送信号更新UI。
```cpp
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = nullptr) : QObject(parent) {}
public slots:
void doWork()
{
// 执行耗时操作
// ...
// 发送信号更新UI
emit workFinished(result);
}
signals:
void workFinished(const QString &result);
};
```
2. 在主线程中创建一个Worker对象,并将其移动到子线程中执行。
```cpp
QThread *thread = new QThread;
Worker *worker = new Worker;
worker->moveToThread(thread);
// 连接信号和槽
connect(thread, &QThread::started, worker, &Worker::doWork);
connect(worker, &Worker::workFinished, this, &MainWindow::updateUI);
// 启动子线程
thread->start();
```
3. 在主线程中定义一个槽函数,用于接收Worker对象发送的信号并更新UI。
```cpp
void MainWindow::updateUI(const QString &result)
{
// 更新UI
// ...
}
```
这样,耗时操作就会在子线程中执行,执行完成后通过信号槽机制将结果传递给主线程,主线程再更新UI。
阅读全文