QT开发——串口助手

一、简介

自己仿写一个串口助手,仿照应用如下所示:
在这里插入图片描述

二、串口编程总体思路

1、导入包和导入头文件
2、创建一个serialPort对象,并用available()函数获取电脑上所有可用串口
3、初始化串口对象中的端口号、波特率、数据位、停止位等信息,并用open()函数对串口进行开启。
4、绑定信号和槽函数,准备读取串口中的数据。(串口中有数据过来时,会接收一个readyRead信号)
5、结束时,通过close()函数对串口关闭。

三、绘制UI界面


用到的组件:

数据接收文本框:Plain Text Edit;
串口属性选择框:Comobo Box;
功能按钮:Push Button;
数据发送文本框:Line Edit;
多功能复选框:Check Box;

初步绘制UI界面:
在这里插入图片描述

注意:接收框一般设置为不能输入,则在属性中设置为只读。
在这里插入图片描述

为功能选择框Comb box添加内容:
在这里插入图片描述
注意:可以点击中间的上下箭头功能修改内容的顺序。

四、编写程序

4.1、导包和头文件

1、先在.pro工程文件中添加一行内容:QT += serialport
在这里插入图片描述
2、在widget.cpp文件中引入串口所要用到的头文件

#include "QtSerialPort/QSerialPortInfo" //导入串口所用的头文件,前提是在.pro文件中添加“QT += serialport”

4.2、获取可用串口端口号

通过foreach将电脑的每个端口号放入字符数组中,最后将包含串口号的字符数组添加到下拉框中。
在这里插入图片描述
注意:这里用到了foreach语句,其用法为:

foreach (varItem , Items)  // foreach(variable ,container)

举个例子:

QStringList slt = {"abc", "qwe", "upo"};
foreach(QString s , slt )
{
    cout<<s<<endl;
}
// 输出结果为:
abc
qwe
upo

界面和代码功能都已初步完成,执行程序看看结果。(前提是电脑先要插入串口的设备,才会识别到哦
在这里插入图片描述

4.3、设置串属性,并打开串口

QT中串口设备是通过serialPort类来描述的。
新建一个serialPort类:

serialPort = new QSerialPort(this);		//在头文件的类中定义  QSerialPort *serialPort;

对打开功能按键添加槽函数
在这里插入图片描述

1)打开串口的槽函数
用户点击打开串口按键后,要获取设置的串口属性,并赋值给serialPort类,然后通过open()函数打开串口,如果成果打开串口,就将图标和字符设置成 对应的标识。

//槽函数:打开/关闭串口  按钮被点击时
void Widget::on_pushButton_OpenOrClose_clicked()
{
    QSerialPort::BaudRate baudRate; //定义串口中一些参数的枚举变量
    QSerialPort::DataBits dataBits;
    QSerialPort::StopBits stopBits;
    QSerialPort::Parity checkBits;

    //qDebug() <<ui->comboBox_boundRate->currentIndex();
    if(ui->comboBox_serialNum->currentIndex() == -1)
    {
         QMessageBox::information(this,"提示","当前没有可用串口,请刷新后再次尝试");
    }
    else
    {
    	/*
    	用户当前是要打开串口,所以先获取用户设置的串口属性,然后初始化serialPort类,
    	最后通过open()函数打开串口。
    	*/
        if(ui->pushButton_OpenOrClose->text() == "打开串口")
        {
            //读取选择的波特率
            switch (ui->comboBox_boundRate->currentIndex())
            {
                case 0:
                        baudRate = QSerialPort::Baud2400; break;
                case 1:
                        baudRate = QSerialPort::Baud4800; break;
                case 2:
                        baudRate = QSerialPort::Baud9600; break;
                case 3:
                        baudRate = QSerialPort::Baud115200; break;
            }
            //读取选择的数据位
            switch (ui->comboBox_date->currentIndex())
            {
                case 0:
                        dataBits = QSerialPort::Data5; break;
                case 1:
                        dataBits = QSerialPort::Data6; break;
                case 2:
                        dataBits = QSerialPort::Data7; break;
                case 3:
                        dataBits = QSerialPort::Data8; break;
            }

            //读取选择的停止位
            switch (ui->comboBox_stop->currentIndex())
            {
                case 0:
                        stopBits = QSerialPort::OneStop; break;
                case 1:
                        stopBits = QSerialPort::OneAndHalfStop; break;
                case 2:
                        stopBits = QSerialPort::TwoStop; break;
            }
            //读取选择的校验位
            switch (ui->comboBox_check->currentIndex())
                {
                    case 0:
                            checkBits = QSerialPort::NoParity; break;
                    case 1:
                            checkBits = QSerialPort::OddParity; break;
                    case 2:
                            checkBits = QSerialPort::EvenParity; break;
                }
            //对定义的串口对象属性赋值
            serialPort->setPortName(ui->comboBox_serialNum->currentText());
            serialPort->setBaudRate(baudRate);
            serialPort->setDataBits(dataBits);
            serialPort->setStopBits(stopBits);
            serialPort->setParity(checkBits);

            if(serialPort->open(QIODevice::ReadWrite) == true)
             {
                QMessageBox::information(this,"提示","串口打开成功");
                ui->pushButton_OpenOrClose->setText("关闭串口");
                ui->lable_status->setStyleSheet("border-image: url(:/Picture/open.png);");
              }
            else
                QMessageBox::critical(this,"提示","串口打开失败");
        }
        else if(ui->pushButton_OpenOrClose->text() == "关闭串口")
        {
            serialPort->close();
            QMessageBox::information(this,"提示","串口已关闭");
            ui->pushButton_OpenOrClose->setText("打开串口");    //提示下次可以打开
            ui->lable_status->setStyleSheet("border-image: url(:/Picture/close.png);");
        }


     }
}

注意:
这里用到了修改标签样式的一个函数setStyleSheet(参数); 其中参数可以参考ui界面中样式表的写法:
在这里插入图片描述

ui->lable_status->setStyleSheet("border-image: url(:/Picture/close.png);");

4.4、刷新电脑串口

//槽函数:刷新串口  按钮被点击时
void Widget::on_pushButton_refres_clicked()
{
    QStringList serialNamePort1;

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

4.5、清空接收窗口内容

void Widget::on_pushButton_clean_clicked()
{
    ui->plainTextEdit_Receive->clear();
}

4.6、串口发送字符串

//槽函数:发送  按钮被点击时
void Widget::on_pushButton_Send_clicked()
{
    serialPort->write(ui->lineEdit_Send->text().toLocal8Bit().data());
}

4.7、清空发送窗口内容

void Widget::on_pushButton_sendClean_clicked()
{
    ui->lineEdit_Send->clear();
}

4.8、接收串口数据

串口发送过来数据,系统会产生一个 readyRead 信号,我们可以将该信号和定义的槽函数进行绑定,从而读取串口数据

1)在widget.h文件中定义槽函数:

slots:
	void serialPortReadyRead();

2)写从串口接收数据的槽函数

//槽函数:从串口中接收数据
void Widget::serialPortReadyRead()
{
    QString buf;
    buf = QString(serialPort->readAll());
    ui->plainTextEdit_Receive->appendPlainText(buf);

    //qDebug() << buf;

}

(3)在widget.cpp文件的构造函数中绑定槽函数:

 connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortReadyRead()));   //将串口读信号与槽函数进行关联
//readyRead()信号,即串口发送过来数据时,程序就会收到一个可以读数据的信号

完工!!!

最后附上注解详细,代码精简的源代码:

QT_串口助手源代码下载地址

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: QT5是一种常见的跨平台应用程序开发工具,可以帮助开发者快速开发各种软件。串口调试助手是一种开发工具,可以帮助工程师快速调试串口设备,检测串口通信是否正常。QT5开发串口调试助手的开放源代码,可以让更多的工程师使用这个工具,快速完成串口调试的任务。 QT5开发串口调试助手可以通过读取串口设备的数据,分析设备发送的信息,输出一些特定的信息进行串口调试。它可以设置串口的通信参数,比如波特率、数据位、停止位等等,方便用户根据自己的需求进行配置。用户可以输入数据来进行测试,也可以从串口设备读取数据,进行分析和操作。 QT5开发串口调试助手还可以支持多种操作系统平台,比如Windows、Linux等等,同时还可以支持多种编程语言,比如C++、Java等等。因此,它非常适合用于嵌入式系统的开发和调试。 总之,QT5开发串口调试助手是一种非常实用的工具,它可以有效地帮助工程师快速进行串口调试,提高开发效率。开放源代码使它更具有灵活性和可扩展性,更容易被广泛应用和改进。 ### 回答2: Qt5开发串口调试助手是一款开源的串口调试工具,其优秀的特点主要体现于以下几个方面: 首先,Qt5开发串口调试助手具有易用性。Qt5开发平台为该软件提供良好的图形界面,操作简洁方便。用户可以很容易地通过该软件发现自己需要的串口,进行连接和调试。 其次,Qt5开发串口调试助手具有高效的性能。该工具使用Qt5的自定义串口模块进行串口配置和数据传输,具有非常高的上限速率和数据吞吐量,能够满足大多数串口通信应用需求。 再次,Qt5开发串口调试助手是一个免费开源软件。其开源项目源代码可以公开访问,方便用户进行修改和二次开发。该工具的开源授权许可为LGPLv3和GPLv2,可以保障代码的免费开放性。 除了以上特点,Qt5开发串口调试助手还附带了一些其他实用的功能,例如数据统计、图形绘制、设备控制等。综合来看,Qt5开发串口调试助手是一个值得用户信赖的开源工具,其高效、易用和免费开源等优点,让其在开发者中拥有广泛的欢迎度和使用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掏一淘哆啦A梦的奇妙口袋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值