说明:Qt系列为本人Qt开发心得,会一直慢慢更新
Qt系列第一篇主要参考: https://blog.csdn.net/qq_48985554/article/details/114990083
该文作者写的非常简练且实用,入门友好,该系列第一篇大部分都是该作者内容。
为何要抄一遍?主要是在后边几篇补充Qt的安装、Qt界面假死处理方法…等内容时需要一个基础代码,
便以此为基础进行增加补充,使其从一个实验走向一个项目。
进程 运行中的程序!没运行的不算
main函数开始运行 到 main函数结束
操作系统上资源调度的基本单位!
线程 函数 并发执行
操作系统上程序调度的基本单位!
同一进程内的线程 共享 进程的所有资源
做两个文本框显示数据,一个按钮控制开始和结束。
其中两文本框分别为基础数据和温度数据,
基础数据简化为显示时间,温度数据显示随机数。
#ifndef BASICTHREAD_H
#define BASICTHREAD_H
//1. 头文件声明
#include
#include
//2. 继承线程类
class basicThread : public QThread
{
Q_OBJECT
public:
basicThread();
//3. 自定义信号
signals:
void basicSignal();
//4. 重写run函数
protected:
void run();
};
#endif // BASICTHREAD_Hs
#include "basicthread.h"
basicThread::basicThread()
{
}
void basicThread::run()
{
while(1)
{
emit basicSignal();
QThread::msleep(1000*1);
}
}
#ifndef TEMPTHREAD_H
#define TEMPTHREAD_H
//1. 头文件声明
#include
#include
//2. 继承线程类
class tempThread : public QThread
{
Q_OBJECT
public:
tempThread();
//3. 自定义信号
signals:
void tempSignal();
//4. 重写run函数
protected:
void run();
};
#endif // TEMPTHREAD_H
#include "tempthread.h"
tempThread::tempThread()
{
}
void tempThread::run()
{
while (1)
{
emit tempSignal();
QThread::msleep(1000*1);
}
}
#ifndef MAINWINDOWPOWER_H
#define MAINWINDOWPOWER_H
#include
#include
#include
#include
#include "tempthread.h"
#include "basicthread.h"
namespace Ui
{
class MainWindowPower;
}
class MainWindowPower : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindowPower(QWidget *parent = 0);
~MainWindowPower();
void quitThread(); //退出线程
private slots:
void on_startButton_clicked(); //开始/结束按钮
void DisplayData_temp(); //槽函数:更新温度数据
void DisplayData_basic(); //槽函数:更新基本数据
private:
Ui::MainWindowPower *ui;
int workStatus = 0; //开始工作状态
//线程
tempThread *tTempThread; //温度数据线程
basicThread *bBasicThread; //基本数据线程
};
#endif // MAINWINDOWPOWER_H
#include "mainwindowpower.h"
#include "ui_mainwindowpower.h"
MainWindowPower::MainWindowPower(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindowPower)
{
ui->setupUi(this);
}
MainWindowPower::~MainWindowPower()
{
delete ui;
}
//结束线程
void MainWindowPower::quitThread()
{
tTempThread->terminate();
tTempThread->wait();
delete tTempThread;
bBasicThread->terminate();
bBasicThread->wait();
delete bBasicThread;
}
//开始按钮
void MainWindowPower::on_startButton_clicked()
{
//按下“开始”
if (workStatus == 0)
{
ui->startButton->setText("结束");
workStatus = 1; //标记工作状态
tTempThread = new tempThread(); //建立线程
bBasicThread = new basicThread();
connect(tTempThread, &tempThread::tempSignal, this, &MainWindowPower::DisplayData_temp); //连接信号和槽
connect(bBasicThread, &basicThread::basicSignal, this, &MainWindowPower::DisplayData_basic);
tTempThread->start(); //启动线程
bBasicThread->start();
}
//按下“结束”
else if (workStatus == 1)
{
ui->startButton->setText("开始");
workStatus = 0; //标记工作状态
quitThread(); //结束线程
}
else
{
qDebug() << "status error!";
}
}
//更新温度数据
void MainWindowPower::DisplayData_temp()
{
QString str_rand = QString("%1").arg(qrand()%30);
ui->lineEditTemp0->setText(str_rand);
}
//更新基础数据
void MainWindowPower::DisplayData_basic()
{
QDateTime currentTime = QDateTime::currentDateTime();
QString str_time = currentTime.toString("hh:mm:ss");
ui->lineEditBasic0->setText(str_time);
}