Qt 串口多线程 节三继承QThread
前文提要:Qt 串口多线程—节一Qt串口收发,请参考https://blog.youkuaiyun.com/renburning/article/details/125239632?spm=1001.2014.3001.5501
Qt 串口 QThread多线程-节二QThread收发https://blog.youkuaiyun.com/renburning/article/details/125319680 介绍了通过QThread对象实现子线程收发数据的功能。本文将介绍通过继承QThread类实现相同的功能。
文章目录
一、前言
前两节分别介绍了Qt串口收发及通过子线程实现收发的功能,本节将介绍通过继承QThread类来实现相同的功能。
在开始前,需要注意的是,继承自QThread类,除了run函数部分运行在新线程外,其他的函数运行还是在主线程中,一定要注意这一点。后续文章会专门讨论这一点。
提示:以下是本篇文章正文内容,下面案例可供参考
二、使用步骤
2.1 界面设计
界面设计参考节一Qt 串口多线程—节一Qt串口收发,https://blog.youkuaiyun.com/renburning/article/details/125239632?spm=1001.2014.3001.5501
2.2 串口服务类创建
将串口数据收发放在新建的类中,创建ComThread类继承自QThread来处理串口相关的操作。
其包含的类容如下comthread.h所示:
#ifndef COMTHREAD_H
#define COMTHREAD_H
#include <QThread>
#include <QObject>
#include <QSerialPort>
class ComThread : public QThread
{
Q_OBJECT
public:
explicit ComThread(QObject *parent = nullptr);
QStringList GetSerialAvailable();
bool InitSerial(QString portname);
void CloseSerial();
signals:
void UpdateSerialData(QByteArray data);
public slots:
void ReceviceSerialData();
void SendSerialData(QByteArray data);
private:
QSerialPort *mSerial;
};
#endif // COMTHREAD_H
与节一相比,串口收到的数据通过信号发送给GUI,GUI的数据通过槽函数传给ComThread对象,然后发送。具体的收发的实现与节一、二相同。
2.3 ComThread实现
主函数中实例 mComThread = new ComThread(this);
然后直接运行start函数: mComThread->start();
三、完整代码
3.1 Test01.pro
QT += core gui \
serialport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
comthread.cpp \
main.cpp \
mainwindow.cpp
HEADERS += \
comthread.h \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${
TARGET}/bin
else: unix:!android: target.path = /opt/$${
TARGET}/bin