QT 多线程
时间: 2023-06-28 22:05:23 浏览: 138
QT-CPP-Multi-UIProgress.rar_QT 多线程_qt ui _qt 线程 ui_qt多线程_qt子线程
在QT中,多线程可以使用QThread类来实现。QThread类是QT提供的一个线程类,它封装了一些底层的线程操作,使得我们可以更加方便地使用多线程。
1. 创建子类继承自QThread类,并重写run()函数,run()函数里面放置需要在新线程中执行的代码。
2. 在子类中创建信号和槽,用于线程间的通信。
3. 在主线程中创建子线程对象,将其启动并连接到信号槽。
下面是一个简单的示例,演示如何在QT中使用多线程:
```cpp
// MyThread.h
class MyThread : public QThread
{
Q_OBJECT
signals:
void threadFinished();
public:
MyThread(QObject* parent = nullptr);
void run() override;
};
// MyThread.cpp
MyThread::MyThread(QObject* parent)
: QThread(parent)
{
}
void MyThread::run()
{
// 执行一些需要在新线程中运行的代码
for (int i = 0; i < 1000000; i++) {
qDebug() << "Thread:" << QThread::currentThread() << i;
}
emit threadFinished();
}
// MainWindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
private slots:
void onThreadFinished();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
MyThread* m_thread;
};
// MainWindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_thread = new MyThread(this);
connect(m_thread, &MyThread::threadFinished, this, &MainWindow::onThreadFinished);
}
void MainWindow::onThreadFinished()
{
qDebug() << "Thread finished";
}
void MainWindow::on_pushButton_clicked()
{
m_thread->start();
}
```
在上面的示例中,MyThread是我们自己定义的一个线程类,继承自QThread类,并重写了run()函数。在run()函数中,我们执行了一些需要在新线程中运行的代码,并发出了一个信号threadFinished,表示线程已经执行完毕。
MainWindow是我们的主窗口类,当用户点击按钮时,会创建一个MyThread对象,并将其启动。在启动线程时,我们会将线程的threadFinished信号与MainWindow的onThreadFinished槽连接起来,这样当线程执行完毕时,就会触发onThreadFinished槽函数。
在onThreadFinished槽函数中,我们可以进行一些线程执行完毕后的处理,比如更新UI界面等。
阅读全文