QT (1) 编写Qt类库来设计上下位机串口通信系统的上位机

本文介绍了如何使用QT Creator将上位机部分的代码编写成QT类库,以解耦图形界面和数据处理代码。通过创建QT程序、QT类库,编写并调用类库,以及进行优化,实现了一个通用的串口通信系统上位机。最终,通过信号和线程控制,优化了读取通道号的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前一篇文章讲到了利用C#窗体应用程序来设计上位机的界面软件,但是这样的界面软件还不够通用,只能定制化运行,图形界面的代码和上位机初步处理数据的代码耦合性较高。所以这篇文章讲了利用QT Creator将上位机部分的代码编写成QT类库,从而和图形界面解耦合,如果使用不同的软件开发图形界面,都可以使用到这个类库。

创建一个QT程序

  • 首先我们需要创建一个QT程序来当做这个类库的主窗体,打开Qt Creator后,选择工具栏"文件"->“新建文件或项目”->“项目”->“Application”->“Qt Widgets Application”;
    在这里插入图片描述
  • 单击"Choose"后,重新命名,选择文件存放路径,点击"下一步";
    在这里插入图片描述
  • 根据自己需要选择"Kits",点击"下一步";然后命名各个文件名和基类名,点击"下一步";最后点击"完成"就可以生成一个Qt主程序了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

创建QT类库

  • 首先右键项目栏中的QT项目名,选择"添加新文件",接着选择"C++"->“C++ Class”,点击"Choose";
    在这里插入图片描述
  • 给类名取名,选择要包含的基类,点击"下一步";
    在这里插入图片描述
  • 可以看到该C++类就被添加到主项目里了,最后点击"完成"。头文件就被放到主项目的Headers文件夹下,.cpp文件就放到Sources文件夹下了。
    在这里插入图片描述

编写QT类库

  • 我们在刚创建的头文件的类里创建各个变量和函数,以光开关模块为例,代码如下所示。
#ifndef BOTDR_H
#define BOTDR_H

#include <QMainWindow>
#include <QObject>                        //Qt链接函数所用
#include <QtSerialPort/QSerialPort>       //Qt串口类
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>                        //qDebug所用
#include <QtDebug>
#include <QThread>                      //Qt多进程所用

class BOTDR : public QThread
{
   
   
    Q_OBJECT

public:
    explicit BOTDR();
    ~BOTDR();
    bool ComOpen(int BaudRate);                    //Qt串口打开函数         
    bool ComClose();	                           //Qt串口关闭函数  
    bool SendData(int *frame, int length);         //Qt串口发送数据函数 
    bool OpticalSwitchSetting(int ChannelNumber);  //光开关下发命令函数 
	int CalBIP8(int *data);                        //异或校验码函数      
	 
    struct QTARGC        //用来显示下位机参数的结构体
    {
   
   
        int Module;       //各个模块的标识码
        int Optical_Rx;   //存放下位机返回的通道号参数
        bool IsSuccess;
        bool IsUpdate;
        int Error;
        int Warning;
        int ErrorExtense;
    };
    QTARGC QtArgc;


signals:
    void readyRead();     //信号函数
    void DataRead();

public slots:
    void ReceivedData();  //Qt串口接收数据函数,也是事件函数,由信号函数触发

private:
    QSerialPort* MySerial;       //实例化一个私有串口
    QByteArray txdata;           //串口接收的QByteArray

    const int OpticalSwitch = 0x03;

protected:
    void run();
};


#endif // BOTDR_H

  • 接着我们在创建的.cpp文件里编写类先关的函数。
#include "botdr.h"

BOTDR::BOTDR()
{
   
   
    //构造函数初始化串口和参数
    MySerial = new QSerialPort();  
    QtArgc.Optical_Rx = 0;
}

BOTDR::
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值