Qt 串口多线程 继承QThread

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
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值