基于QT的串口调试助手

使用串口步骤:

1. 首先需要QT支持串口模块,需要在pro文件中添加

QT += serialport #添加串口模块

2. 在实现头文件中添加串口的头文件

#include <QSerialPort> //串口
#include <QSerialPortInfo> //串口的信息

3. 在开发中实例化串口对象即可。

        需要注意的是,串口发送数据前需要配置一些属性,打开后才能发送与接收数据。

基于QT的串口调试助手

        可以实时检测串口是否在线,并可以发送与接收数据,通过ascii或hex来显示。

项目实现代码:

//dialog.hpp#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
//添加串口头文件
#include <QSerialPort>
#include <QSerialPortInfo>#include <QTimer>
#include <QDateTime>
#include <QMessageBox>
#include <QString>
#include <QTextCodec>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{Q_OBJECT  //宏替换,把一些声明加入到类中。public:explicit Dialog(QWidget *parent = 0);~Dialog();private:Ui::Dialog *ui;QStringList portStringList;       //定义一个容器用来验证是否有串口需要添加QSerialPort *serial;              //定义一个串口QTimer *timer1;                   //实现热插拔定时器
private slots:void timerouttofindport();        //超时函数void datarecv();                  //数据接收void datasend();                  //数据发送void openSerial();                //打开串口void closeSerial();               //关闭串口void findSerial();                //热插拔函数
};#endif // DIALOG_H//dialog.cpp#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);ui->pushButton_close->setEnabled(false);ui->pushButton_send->setEnabled(false);findSerial();//检测电脑的串口timer1=new QTimer(this);QObject::connect(timer1,SIGNAL(timeout()),this,SLOT(timerouttofindport()));//定时器timer1->start(500);serial=new QSerialPort(this);//实例化串口QObject::connect(serial,SIGNAL(readyRead()),this,SLOT(datarecv()));//串口数据接收QObject::connect(ui->pushButton_send,SIGNAL(clicked()),this,SLOT(datasend()));//发送数据QObject::connect(ui->pushButton_open,SIGNAL(clicked()),this,SLOT(openSerial()));//打开串口QObject::connect(ui->pushButton_close,SIGNAL(clicked()),this,SLOT(closeSerial()));//关闭串口QObject::connect(ui->pushButton_clear,SIGNAL(clicked()),ui->textBrowser_recv,SLOT(clear()));//清除接收数据
}Dialog::~Dialog()
{delete ui;
}void Dialog::findSerial()
{QStringList  newPortStringList; //定义一个string容器newPortStringList.clear();foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())//foreach是qt定义的一个按照顺序遍历容器的循环{newPortStringList +=info.portName();//info就是遍历的成员,它的portName()方法是转化为QString类型}if(newPortStringList.size()!=portStringList.size())//判断是否有新的串口或者取出串口{closeSerial();portStringList=newPortStringList;ui->comboBox->clear();ui->comboBox->addItems(portStringList);}
}void Dialog::timerouttofindport()
{findSerial();timer1->start(500);
}void Dialog::datarecv()
{QByteArray temp=serial->readAll();int len=temp.length();QString sss;sss.setNum(len,10);if(ui->radioButton_ascii->isChecked()==true)//ascii{ui->textBrowser_recv->append(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss zzz]")+" Recv ASCII 个数:"+sss);ui->textBrowser_recv->append(temp);}else//hex{ui->textBrowser_recv->append(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss zzz]")+" Recv HEX 个数:"+sss);QString data1=temp.toHex();int length=data1.length(),i;for(i=0;i<=length/2;i++){data1.insert(2+3*i,' ');}ui->textBrowser_recv->append(data1);}
}void Dialog::datasend()
{QByteArray bytearray;bytearray=ui->textBrowser_send->toPlainText().toLatin1();serial->write(bytearray);int len=bytearray.length();QString sss;sss.setNum(len,10);if(ui->radioButton_ascii->isChecked()==true)//ascii{ui->textBrowser_recv->append(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss zzz]")+" Send ASCII 个数:"+sss);QString temp=bytearray;ui->textBrowser_recv->append(temp.toLatin1());}else{ui->textBrowser_recv->append(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss zzz]")+" Send HEX 个数:"+sss);QString data1=bytearray.toHex();int length=data1.length(),i;for(i=0;i<=length/2;i++){data1.insert(2+3*i,' ');}ui->textBrowser_recv->append(data1);}
}void Dialog::openSerial()
{serial->setPortName(ui->comboBox->currentText());//设置串口名字serial->setBaudRate(ui->comboBox_btl->currentText().toInt());//设置波特率switch (ui->comboBox_data->currentText().toInt())//设置数据位{case 5:serial->setDataBits(QSerialPort::Data5);break;case 6:serial->setDataBits(QSerialPort::Data6);break;case 7:serial->setDataBits(QSerialPort::Data7);break;case 8:serial->setDataBits(QSerialPort::Data8);break;default:serial->setDataBits(QSerialPort::UnknownDataBits);}switch (ui->comboBox_jiaoyan->currentIndex())//设置校验位{case 0:break;//偶校验case 1:serial->setParity(QSerialPort::OddParity);break;//奇校验case 2:serial->setParity(QSerialPort::NoParity);break;//无校验default:serial->setParity (QSerialPort::UnknownParity);break;}switch (ui->comboBox_stop->currentIndex())//停止位{case 0:serial->setStopBits(QSerialPort::OneStop);break;//1case 1:serial->setStopBits(QSerialPort::OneAndHalfStop);break;//1.5case 2:serial->setStopBits(QSerialPort::TwoStop);break;//2default:serial->setStopBits(QSerialPort::UnknownStopBits);}serial->setFlowControl(QSerialPort::NoFlowControl);//设置流控if(!serial->open(QIODevice::ReadWrite)){QMessageBox::warning(this,"error",serial->errorString(),QMessageBox::Ok);return;}ui->pushButton_open->setEnabled(false);ui->pushButton_close->setEnabled(true);ui->pushButton_send->setEnabled(true);ui->comboBox->setEnabled(false);ui->comboBox_btl->setEnabled(false);ui->comboBox_data->setEnabled(false);ui->comboBox_jiaoyan->setEnabled(false);ui->comboBox_stop->setEnabled(false);
}void Dialog::closeSerial()
{if(serial->isOpen())serial->close();ui->pushButton_open->setEnabled(true);ui->pushButton_close->setEnabled(false);ui->pushButton_send->setEnabled(false);ui->comboBox->setEnabled(true);ui->comboBox_btl->setEnabled(true);ui->comboBox_data->setEnabled(true);ui->comboBox_jiaoyan->setEnabled(true);ui->comboBox_stop->setEnabled(true);
}

ui:

本项目实现了基本的数据发送与接收,但中文乱码问题并没有解决。

本人才疏学浅,该项目到此为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/354323.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

BCom(多功能串口调试助手)

BCom多功能串口调试助手是一款完全免费开源的串口调试工具&#xff0c;由吾爱论坛大神开发制作而来。与一般的串口调试工具相比&#xff0c;这款工具的优势在于支持串口功能的前提下&#xff0c;又加入了一些好用的小工具&#xff0c;如截图工具&#xff0c;记事本&#xff0c;…

LabView串口调试助手

最近&#xff0c;开始学习LabView&#xff0c;这是一款图形化编程软件。串口自收发是我的第一个练习&#xff0c;在这个练习中&#xff0c;我初步了解了LabView部分控件的使用方法。话不多说&#xff0c;让我们开始吧&#xff01; 首先&#xff0c;是VI界面的制作&#xff0c;…

Python Qt GUI设计:做一款串口调试助手(实战篇—1)

目录 1、UI设计 2、将UI文件转换为Py文件 3、逻辑功能实现 3.1、初始化程序 3.2、串口检测程序 3.3、 设置及打开串口程序 3.4、定时发送数据程序 3.5、发送数据程序 3.6、接收数据程序 3.7、保存日志程序 3.8、加载日志程序 3.9、打开博客、公众号程序 3.10、清除…

Linux - 第23节 - Linux高级IO(一)

目录 1.IO的基本概念 2.钓鱼五人组 3.五种IO模型 3.1.阻塞IO 3.2.非阻塞IO 3.3.信号驱动IO 3.4.IO多路转接 3.5.异步IO 4.高级IO重要概念 4.1.同步通信 VS 异步通信 4.2.阻塞 VS 非阻塞 5.其他高级IO 6.阻塞IO 7.非阻塞IO 7.1.fcntl函数介绍 7.2.fcntl函数的使…

Mac上iPad Pro高清桌面动态壁纸

ipad pro壁纸哪里下&#xff1f;Mac上iPad Pro高清桌面动态壁纸带给大家&#xff0c;iPad壁纸拥有多种色彩样式变幻。有了这款壁纸将会让您苹果电脑桌面可以与众不同。

iPhone 系列壁纸,太好看了!

以下内容来自公众号逆锋起笔&#xff0c;关注回复壁纸获取更多 &#xfe61;图源网络&#xff0c;如侵联删 36 张图带你理解计算机网络 6 大基础知识点 一个疫情催生的有趣开源项目 Win11 全新壁纸下载 苹果 iPhone 13 内置原生壁纸下载 macOS 12 内置原生壁纸下载 17 张程序员…

苹果macOS 13 Ventura 5K原生动态壁纸

WWDC22苹果开发者大会上&#xff0c;推出了macOS 13&#xff0c;代号Ventura&#xff08;文图拉)&#xff0c;让 Mac 体验更胜以往。Ventura的原生动态壁纸延续上一代的简约流线型设计&#xff0c;以橙色到红色的过渡为主体&#xff0c;天蓝到蓝黑色的过渡为背景&#xff0c;依…

苹果iPad OS 16原生壁纸Mac动态桌面

WWDC22苹果开发者大会上&#xff0c;除了推出macOS 13&#xff0c;还有OS 16系统&#xff0c;相比macOS 13内置壁纸&#xff0c;同样的简约流线设计&#xff0c;苹果iPad OS 16原生壁纸更显得具有科技感&#xff0c;制作成Mac动态桌面壁纸&#xff0c;也是让人眼前一亮。 苹果i…

唯美云朵壁纸苹果动态

再怎么 葱郁 宽广的森林 &#xff0c;也留不住 随性 自在的云 &#xff01;为您带来唯美云朵壁纸苹果动态&#xff0c;让桌面更有韵味吧&#xff01; 唯美云朵壁纸苹果动态

壁纸|苹果Live壁纸以及静态壁纸,给大家分享点

编辑&#xff5c;排版&#xff5c; 宅哥技术 ---------♥--------- Live壁纸 大家都知道这个Live壁纸在微信上传是不能动的&#xff0c;所以我把这些壁纸都发在了我的微博里面&#xff0c;这样我们保存出来的壁纸是可以动的哦&#xff01;凡是支持3D touch的手机都可以使用&…

怎么设置动态壁纸?这样做就行!

案例&#xff1a;怎么设置动态壁纸 【朋友们&#xff0c;我的壁纸一直都是静态的&#xff0c;最近感觉有点审美疲劳了&#xff0c;想换些好看的动态壁纸&#xff0c;有朋友知道应该如何设置动态壁纸吗&#xff1f;】 经常使用电脑的朋友可能会觉得一直用同一张壁纸会感觉审美…

将MSYS2 MinGW集成到Windows终端

微软开发了一款Windows终端的开源软件&#xff0c;非常好用。安装后在Win7及以上系统会在右键菜单中添加一条“在终端中打开”的命令&#xff0c;非常方便。它默认配置了Windows命令行以及PowerShell&#xff0c;如果安装了Visual Studio 2022还会配置Visual Studio 2022的命令…

python之函数(参数,匿名函数,局部变量和全局变量)

文章目录 前言一、函数的参数 1、形参和实参2、必传参数&#xff08;也叫&#xff1a;必须参数&#xff09;3、关键字传参4.、默认参数5、不定长参数6、传参的顺序二、匿名函数&#xff08;lambda函数&#xff09; 1. 定义及特点语法格式2. lambda函数的特点三、函数返回值retu…

QT 5.14 和 VS2017脱机离线安装记录

QT 5.14是最后的离线安装版本&#xff0c;都推荐这个。看了下&#xff0c;官方建议搭配 VS2017/VS2015 VS版本对于QT&#xff0c;我一直偏好社区版&#xff0c;只要编译器就够了&#xff0c;自己加上SDK目录。因为大部分工作都是在QT内完成。VS2017的离线安装比较复杂&#xff…

Git常用命令submodule

Git常用命令submodule 1、需求 当程序比较大参与开发人员较多时&#xff0c;代码管理就复杂起来。代码如果全员可见&#xff0c;可以创建 share 分支维护共用代 码&#xff0c;可以创建 core 分支维护核心算法代码&#xff0c;各进程分别占一个分支&#xff0c;定期同步 sha…

vmware15下载与安装教程

VMware VMware是一款虚拟机软件&#xff0c;可以在同一台计算机上运行多个操作系统。VMware15是VMware公司推出的最新版本&#xff0c;具有更好的性能和稳定性&#xff0c;同时支持Windows、Mac以及Linux等多种操作系统。 以下是VMware15的下载安装教程&#xff1a; 下载VMw…

Win10—VMware15虚拟机安装教程

一、下载 下载地址VMware15&#xff08;32/64&#xff09;位下载地址&#xff0c;提取码: qvry 二、安装 解压缩如下&#xff1a; 双击exe运行 点击【下一步】 勾选【我接受条款协议中的条款】&#xff0c;然后点击【下一步】。 点击【更改】更改软件的安装目录&…

完全免费PNG素材库,免费可商用~

推荐的这几个PNG素材网一定要收藏~免费可商用~ 菜鸟图库 https://www.sucai999.com/searchlist/66008----all-0-1.html?vNTYxMjky 菜鸟图库是一个为新手设计师提供免费素材的网站&#xff0c;站内有非常多设计相关素材&#xff0c;比如平面模板、UI素材、电商素材、免抠素材…

VMware15虚拟机安装教程

​​​​​关注公众号&#xff0c;免费获取资料 简介&#xff1a; VMware&#xff08;威睿&#xff09; 是全球桌面到数据中心虚拟化解决方案的领导厂商。全球不同规模的客户依靠VMware来降低成本和运营费用、确保业务持续性、加强安全性并走向绿色。VMware使企业可以采用能够解…

【转】VMware15虚拟机安装教程

https://mp.weixin.qq.com/s/Rdj5AA7aVOzFDMnXeousWg &#xff08;源于软件安装管家公众号&#xff09; VMware15&#xff08;32/64&#xff09;位下载地址&#xff1a; pan.baidu.com/s/16_JlJ31R6wR8ja_f7o9kNw 提取码: 4c94 [Windows 10/64位下载链接]&#xff1…