利用QT中的QThread实现多线程的方法有很多种, 不同的场合下用不同的方法可以达到不一样的效果. 这里就把这几种常见的方法整理出来, 大家可以照自己的需要去选择.
写了个Qt的小程序来演示不同的QThread运用方式. 用的QT版本是5.15.2, QtCreator 版本是4.14.0
首先在Qt创建一个项目类名为QThreadLearn
ui的界面只需要放一个按钮用于触发程序 命名为pushButton, 利用转到槽自动生成槽函数
void QThreadLearn::on_pushButton_clicked()
{
}
我们要达到的目的是让程序执行从1到1000000的计数,然后把计数过程通过qDebug打印出来。
如果不用线程直接在按钮槽函数中实现用qDebug打印计数i的值,那么ui界面会在运行的时候卡死。槽函数代码如下
void QThreadLearn::on_pushButton_clicked()
{
for (int i{
0}; i<1000000; i++){
qDebug()<<"i = "<<i;
}
}
所以我们需要引用线程,实现让这个计数程序在线程里跑的步骤如下
第一步在头文件引入QThread
#include <QThread>
第二步再定义一个私有变量 thread
QThread *thread;
第三步让程序在thread里面跑
下面几种不同的写代码方式都可以实现目标的功能且界面不卡
1. 在同一个类里写一个全局函数counting(),然后让thread去执行这个函数
槽函数和全局函数counting的代码如下
void counting(int count)
{
for(int i{
0}; i<count ; i++){
qDebug()<<"i ="<<i;//从0到10000000依次打印i的值
}
}
void QThreadLearn::on_pushButton_clicked()
{
thread = QThread::create(counting, 10000000);//把counting函数放进thread线程里执行, 把10000000传过去
connect(thread,&QThread::</