QT实现串口助手

本文介绍了如何使用Qt创建一个串口调试助手,包括工程设置、界面设计(如LineEdit、TextEdit和ComboBox),以及串口匹配、初始化、发送、接收和关闭功能的实现。最后,文章还涵盖了如何将项目打包为可执行文件并解决依赖问题。
摘要由CSDN通过智能技术生成

1.创建工程

选择Qt Widgets Application,输入名称选择路径(不要出现中文),define build system选择默认的qmake

下一步中的bass class选择QWidget,其余配置均按照默认即可,完成项目创建

下面对forms文件夹下面的widget.ui文件进行编辑

  1. QLineEdit是单行文本输入,一般用于用户名、密码等少量文本交互地方。
  2. QTextEdit用于多行文本,也可以显示HTML格式文本。QTextEdit多用于显示
  3. QPlainTextEdit与QTextEdit很像,但它多用于需要与文本进行处理的地方,而QTextEdit多用于显示,可以说,QPlainTextEdit对于plain text处理能力比TextEdit强。(比如文本编辑器就用Qplain Text Edit)

2.实现

2.1.实现ui界面

        串口调试助手接受框选择input widgets中的plain text edit即可

        选择框选择combo box进行串口号等功能选择

                双击可以增加其选项

        发送框选择line edit

        按钮选择push button

排版如下

并且我们可以通过修改右下角的currentindex来修改默认选项

        正如这里的currentindex是2因此波特率就是默认为第三个就是115200

最后对框进行水平排版和垂直排版,最后对整体进行栅格排版即可

2.2.实现逻辑功能

在serial.pro中加入serialport

(1)串口匹配

        我们需要自动搜寻串口,这里我们在widget.h文件中定义一个串口

QSerialPort *serialPort;并在其加入头文件#include <QtSerialPort/QSerialPortInfo>

        

并在widget.cpp文件定义串口

  1. foreach(const QSerialPortInfo &info ,QSerialPortInfo ::availablePorts()): 这是一个 foreach 循环,它遍历了通过 QSerialPortInfo::availablePorts() 函数获得的可用串口信息列表。在循环中,每个可用的串口信息都被存储在变量 info 中。

  2. serialNamePort << info.portName();: 在循环中,每次迭代会将当前串口的名称(通过 info.portName() 获取)添加到一个容器中。

  3. ui ->serial_bt->addItems(serialNamePort);: 最后,将存储了所有串口名称的容器 serialNamePort 中的元素添加到 UI 中,估计 serial_bt 是一个下拉菜单,addItems 函数会将串口名称添加为下拉菜单的选项。

 foreach(const QSerialPortInfo &info ,QSerialPortInfo ::availablePorts())
    {
        serialNamePort << info.portName();
    }
    ui ->serial_bt->addItems(serialNamePort);

即可实现串口匹配选择

(2)打开串口初始化实现

当我们点击打开串口时候我们需要对上图参数进行初始化,我们使用打开串口按钮的槽,右键点击打开串口,选择转到槽,选择clicked()

我们先定义了对应的参数用作中间变量,然后对ui->baud_bt->currentText()进行判断,这就是对ui界面上的buad_bt(我给那个框起的名字)哪个框对应的信息进行判断(这是一个字符串),如果相符合就设置为宏,

QSerialPort ::Baud4800就是对应波特率为4800的宏定义,下面对信息进行初始化,最后对串口状态进行判断,使用QMessageBox提醒,其可以实现很多种弹框,下面是一些。


void Widget::on_open_bt_clicked()
{
    QSerialPort ::BaudRate baudrate ;
    QSerialPort ::StopBits stopbits ;
    QSerialPort ::DataBits databits ;
    QSerialPort ::Parity   checkbits;

    //判断波特率
    if(ui -> baud_bt ->currentText() == "4800")
        baudrate = QSerialPort ::Baud4800;
    else if(ui -> baud_bt ->currentText() == "9600")
        baudrate = QSerialPort ::Baud9600;
    else if(ui -> baud_bt ->currentText() == "115200")
        baudrate = QSerialPort ::Baud115200;
    else
        baudrate =QSerialPort ::Baud115200;
    //判断数据位
    if(ui ->data_bt ->currentText() == "5")
        databits = QSerialPort ::Data5;
    else if(ui ->data_bt ->currentText() == "6")
        databits = QSerialPort ::Data6;
    else if(ui ->data_bt ->currentText() == "7")
        databits = QSerialPort ::Data7;
    else if(ui ->data_bt ->currentText() == "8")
        databits = QSerialPort ::Data8;
    else
        databits = QSerialPort ::Data8;
        

    //判断停止位
    if(ui->stop_bt -> currentText() == "1")
        stopbits = QSerialPort::OneStop;
    else if(ui->stop_bt -> currentText() == "1.5")
        stopbits = QSerialPort::OneAndHalfStop;
    else if(ui->stop_bt -> currentText() == "2")
        stopbits = QSerialPort::TwoStop;
    else
        stopbits = QSerialPort::OneStop;
        
    //校验位
    checkbits = QSerialPort::NoParity;

    //将配置信息同步到配置
    serialPort -> setPortName(ui ->serial_bt->currentText());
    serialPort -> setBaudRate(baudrate);
    serialPort -> setDataBits(databits);
    serialPort -> setStopBits(stopbits);
    serialPort -> setParity(checkbits);

    //检查是否打开
    if(serialPort -> open(QIODevice::ReadWrite) == true)
        QMessageBox::information(this,"提示","成功");
    else
        QMessageBox::critical(this,"提示","失败");


}

(3)关闭、发送、清空串口实现

        其中写入write是写ui中的send_text框框里面的文字并把其转换为对应数据

//串口open后需要close否则会失败
void Widget::on_close_bt_clicked()
{
    serialPort ->close();
}
void Widget::on_send_bt_clicked()
{
    serialPort->write(ui->send_text->text().toLocal8Bit().data());
}

void Widget::on_clear_bt_clicked()
{
    ui -> send_text ->clear();
}

(4)接收数据实现

        这里我们需要实现框框接受数据,这里不想打开、发送等按键,不是说按了之后进入槽函数,而是说我们接收到数据就进入槽函数,因此我们需要进行手动关联信号and槽函数,首先我们需要在头文件中的private slots:中先定义一个槽函数方便后面跳转使用

然后我们在widget.cpp文件中实现槽函数,首先定义了一个qstring类型,然后得到数据,(个人理解这里的serialPort就是实际接入的串口了)然后把接受框放入buf

    //发信号者 信号 接收信号者 槽函数
    connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortreadyread_slot()));
void Widget::serialPortreadyread_slot()
{
    QString buf;
    //读取串口数据
    buf = QString(serialPort ->readAll());
    //放置到串口显示界面
    ui ->receive_text ->appendPlainText(buf);
}

3.封装为exe可执行文件

        在实际工程中我们需要构建win环境下可执行的文件

3.1导出离线文件加入图标

把左下角的debug换为release,再次指向文件,去文件夹即可找到对应的release文件

去该文件夹,再进入release文件夹,可以看到已经生成了一个exe可执行文件

但是缺少了对应的链接库,是打不开的

我们可以找一个自己喜欢的图标将其在网页转换为一个ico类型文件

放入我们的源码文件夹

再去serial.pro文件夹加入

RC_ICONS = favicon.ico

重新编译你会发现exe文件已经变为对应图标

3.2封装exe文件

创建一个文件夹,把exe文件放入其中,打开这个qt的执行文件

 

首先进入放exe的单独文件夹,cd /d C:\Users\fly613\Desktop\kk win中的命令是cd /d <文件路径>,在使用windeployqt <exe文件名>,即可配置对应的库

完成后即可发现生产了很多dll文件,然后你的exe文件可以执行啦

  • 23
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
与硬件通信的程序基本上要用到串口,虽然qt5以后集成了串口通信类,但是个人觉得那个串口通信类有点问题,在linux上表现很好,windows上大数据会有怪怪的问题出现,而且只能在qt5以上的版本才能用,无奈大部分的嵌入式linux上还停留在4.7.1到4.8.5左右的版本,所以本人一直喜欢用第三方的串口通信类做处理。 程序调试中经常需要串口调试,甚至还需要模拟设备数据回复,甚至串口转网络出去,特意将这些常用功能都做到一个串口调试助手中去。 基本功能: 1:支持16进制数据发送与接收。 2:支持windows下COM9以上的串口通信。 3:实时显示收发数据字节大小以及串口状态。 4:支持任意qt版本,亲测4.7.0 4.8.5 4.8.7 5.4.1 5.7.0 5.8.0。 5:支持串口转网络数据收发。 高级功能: 1:可自由管理需要发送的数据,每次只要从下拉框中选择数据即可,无需重新输入数据。 2:可模拟设备回复数据,需要在主界面开启模拟设备回复数据。当接收到设置好的指令时,立即回复设置的回复指令。例如指定收到0x16 0x00 0xFF 0x01需要回复0x16 0x00 0xFE 0x01,则只需要在SendData.txt中添加一条数据16 00 FF 01:16 00 FE 01即可。 3:可定时发送数据和保存数据到文本文件:,默认间隔5秒钟,可更改间隔时间。 4:在不断接收到大量数据时,可以暂停显示数据来查看具体数据,后台依然接收数据但不处理,无需关闭串口来查看已接收到的数据。 5:每次收到的数据都是完整的一条数据,而不是脱节的,做了延时处理。 6:一套源码随处编译,无需更改串口通信类,已在XP/WIN7/UBUNTU/ARMLINUX系统下成功编译并运行。
Qt C 串口助手是一个基于Qt库和C语言开发的串口通信辅助工具。它可以实现与串口设备的连接、数据的发送和接收、调试信息的显示等功能。 首先,Qt C 串口助手通过Qt库提供的QSerialPort类,简化了串口通信的编程过程。我们可以使用QSerialPort类来打开指定的串口设备,并设置波特率、数据位、校验位等参数。同时,还可以监听串口收到的数据。 其次,在串口助手的界面中,我们可以通过按钮或菜单选项来进行串口的连接和断开。当串口成功连接后,我们可以将待发送的数据输入到发送文本框中,然后点击发送按钮将数据发送出去。同时,接收区域会实时显示串口接收到的数据。这样方便了用户对串口的操作和数据的收发。 此外,Qt C 串口助手还提供了数据的调试功能。用户可以选择以ASCII码或十六进制的形式来显示接收到的数据。这对于调试串口设备时特别有用。用户还可以选择是否在接收区域显示时间戳,以便记录每条数据的接收时间。 最后,Qt C 串口助手还具备其他辅助功能,比如清除接收区、保存接收到的数据到本地文件、设置串口超时时间等。这些功能的设计使得串口助手更加实用和便捷。 综上所述,Qt C 串口助手是一个功能完善的串口通信辅助工具。它采用Qt库和C语言开发,具备串口连接、数据发送和接收、调试信息显示等功能,帮助用户轻松实现串口通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值