先看一个示例:
void Widget::on_pushButton_clicked()
{
while(1)
{
int a=1;
a=2;
}
}
点击pushbutton后:
程序无响应啦。因为一直都在进行那个死循环。
推广一下场景:某个操作的计算量特别大,会耗时很久,如果在主线程中进行计算,页面会卡住,这时候就需要用到多线程啦。
参考:
Qt中多线程写法一(步骤讲解+代码+加演示)_qt实训多线程-CSDN博客
#ifndef TRY_THREAD_H
#define TRY_THREAD_H
#include <QObject>
#include <QThread>
class try_thread : public QThread
{
Q_OBJECT
public:
explicit try_thread(QObject *parent = nullptr);
protected:
void run();
};
#endif // TRY_THREAD_H
#include "try_thread.h"
try_thread::try_thread(QObject *parent) : QThread(parent)
{
}
void try_thread::run()
{
while(1)
{
int a=1;
a=2;
qDebug()<<a;
}
}
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(this,SIGNAL(destroyed()),this,SLOT(quitThreadSlot()));
}
void Widget::on_pushButton_clicked()
{
t=new try_thread(this);
t->start();
}
void Widget::quitThreadSlot()
{
t->quit();
t->wait();
}
这样写页面就不会卡顿啦! 那个耗时的死循环在子线程中执行啦!
(要注意子线程的退出,销毁)