QT串口助手入门到精通

发布时间:2024年01月16日

系列文章目录

QT串口助手入门到精通



一、创建第一个QT程序

1.1Location(项目简介和位置)

创建QT项目过程中不能有中文或者空格,可以有下划线,有的话程序不报错,但是窗口显示不出来

在这里插入图片描述


1.2Kits(构建套件)

  1. QT可以开发安卓的,可以选择开发安卓的环境
  2. 可以自由选择不同版本进行开发,比如自己的版本低,可以选择高版本的环境进行开发
    在这里插入图片描述

1.3Details(类的信息)

创建QT项目的时候都会让你创建一个类,这个类是主窗口的类
第二个窗口是基类,基类有三种选择

  1. Qwidget 创建出来就是一个大窗口
  2. QMainWindow 创建出来比1多个菜单栏、工具栏、状态栏
  3. QDialog 创建出来比1多个对话框(安装软件下一步那个就是对话框)

三种选择
Qwidget 是QMainWindow和QDialog的父类

在这里插入图片描述类名可以用默认的也可以换成自己想用的
比如我换成myWidget,widget可以理解成窗口的意思
创建界面,选择上,后面就有个设计界面,可以拖出里面的框架

在这里插入图片描述


1.4汇总

添加到版本信息里面是空的,以后QT开发是团队开发,需要用到版本控制系统(避免团队写的代买冲突),比如git svn vss(用的少)

在这里插入图片描述


二、常用操作

2.1显示文件分类

里面有文件的分类,如果不喜欢文件分类可以点开所框的图形,简化树形图,就消失了文件的分类
在这里插入图片描述
在这里插入图片描述


2.2代码分栏

可以选择左右分栏和上下分栏,选择后再点下就删掉了,你可以左边写你的代码,后边代码参考别人的源码

在这里插入图片描述


三、代码分析

在这里插入图片描述


四、总结

QT是个跨平台图形界面引擎
优点:

  • 跨平台
  • 接口简单,易上手
  • 一定程度下简化了内存的回收

版本:分为开源版和商业版本

成功案列:

  • linux桌面环境KDE
  • 谷歌地图
  • VLC多媒体播放器

创建第一个QT程序
点击创建项目后,选择项目路径以及给项目起名称
名称–不能有中文不能有空格**
路径–不能有中文路径
默认创建有窗口类,mvWidget,基类有三种选择:QWidget、QMainWindow、aDialogw
main 函数
QApplication a应用程序对象,有且仅有一个
myWidget w;实例化窗口对象
w.show()调用show 函数显示窗口
return a.exec()让应用程序对象进入消息循环机制中,代码阻塞到当前行(避免窗口一闪而过)


END

系列文章目录

QT文件以及命名规范和快捷键



一、.pro文件

上面显示你创建的时间
在这里插入图片描述
TARGET(生产目标.exe程序)
点击Explorer中显示后,出现这个目录

在这里插入图片描述
上一级目录,里面有build文件,build文件里面有个debug,debug里面有.exe程序

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
更换TARGET生成的目标文件后会新建一个.exe的程序
想更换你的程序名就从这里修改
在这里插入图片描述


二、.h文件(头文件)

在这里插入图片描述
析构函数可以理解释放掉改函数

在这里插入图片描述


三、 .cpp文件(源文件)及命名规范

主要写的是命名规范

ctrl + alt 点击函数可以跳转到该函数

在这里插入图片描述


帮助文档界面
在这里插入图片描述


END

系列文章目录

QT串口助手开发文章1



一、UI设计

首先需要创建QT程序
创建QT程序的时候,记得点下创建页面,基类选择成Dialog,点击Forms文件夹下面的ui文件便可以绘制ui图形了

1.1combo Box(下拉框)

1.1.1下拉框固定用法(ui方式)

在页面绘制一个combo Box,ctrl + r(快捷键)运行
需要学习快捷键用法参考博客

发现这个下拉框选择不了子选项,因为没有添加子选项
在这里插入图片描述

关掉运行的结果,双击下拉框,便可以编辑下拉框了

在这里插入图片描述

点击加号按钮就可以给下拉框添加子选项了,添加完点击ok

在这里插入图片描述
再次运行ctrl + r,下拉框就可以选择子选项了

在这里插入图片描述

这种方式不灵活添加完后,只能有你设置的固定选项


1.1.1下拉框代码方式

代码方式是灵活动态调整Com box(下拉框)
点击下拉框,红框标出的是Objectname就是控件(Combo box就是控件之一)的名字也就是控件的ID,可以更改它的命名为CboxSerialPort(直接编辑值就可以了)
在这里插入图片描述
在这里插入图片描述
该列表框属于ui的一部分,所以可以更改.cpp文件即通过代码方式来灵活设置下拉框的子选项
CBoxSerialPort是之前设置的Combo box
addItem是增加子选项
在这里插入图片描述
出现c++承载,函数名相同,函数的参数不同(在同一个函数名下面实现不同的效果功能),输入不同的参数会调用对应参数的函数

第一个函数的参数Qstring(字符串),把字符串增加进去作为子选项
等于号是默认参数的意思
比如在这里只传一个参数,COM0,后面的参数就默认等于后面函数自带第二个参数的默认值

在这里插入图片描述
第二个函数参数icon是图标+字符串一起增加子选项

在这里插入图片描述我们使用第一个函数,ctrl + b 编译然后ctrl + r运行下看效果
在这里插入图片描述

运行效果,5678也有了,证明这样的方法是直接增加没有覆盖掉之前的ui方式添加的端口

在这里插入图片描述


二、响应combo box

点击了COM1,怎么知道我点击的是COM1
如:
按钮的响应(push button)
点击右键转到槽,里面有个clicked参数,clicked是个信号,当点击这个按钮的时候,clicked信号发出,对应槽函数响应该信号,从而完成对应的动作,比如关闭对话框
在这里插入图片描述在这里插入图片描述

在这里插入图片描述记得把pushbutton再右键删掉


同理combo box
右键点击我们之前创建的combo box 转到槽,选择currentIndexChanged(qstring)(我们用的串口助手,选择不同端口就会修改索引,由于端口是字符串所以选择这个我红框所框的)
点击ok直接切换到dialog.cpp文件中对应的槽函数
在这里插入图片描述在这里插入图片描述
参数&argl就是currentIndexChanged所携带的参数就是串口号(字符串)

展示该字符串需要在ui里面加入一个label用来显示我们刚才选择的串口号,并且直接点击label修改为待选,修改其id名
在这里插入图片描述set text设置标签,标签是arg1(串口号),然后编译ctrl +b 运行ctrl +r

在这里插入图片描述
运行效果

在这里插入图片描述
点击COM1标签变为COM1,当我们点击COM1的时候,发出信号,这个信号是currentIndexChanged当前索引被修改,并且该信号会携带字符串,这个字符串就是你选择的COM1,从槽传进去,COM1传进去,设置标签显示
在这里插入图片描述

三、串口的使用

点击帮助文档找QSerialPort,就显示QserialPort这个类,里面很多函数,我们只需要设置端口号,所以找set函数,设置端口名,数据位,波特率,校验位,停止位
在这里插入图片描述

在这里插入图片描述下一节书写串口的具体写法


END

系列文章目录

QT串口助手文章2书接上文



一、串口的使用

1.1串口环境配置

根据文章一最后的帮助文档
我们需要给.pro文件添加功能模块和.h文件要加进去头文件才能使用端口功能

在这里插入图片描述
在这里插入图片描述


1.2添加串口到实例

加实例,在对话框private私有成员加实例
习惯类内成员以m开头
mSerialPort 是 QSerialPort(类)的实例(对象)
在这里插入图片描述


二、设置串口功能

2.1设置端口号、波特率、校验位,数据位,停止位功能、打开功能

按下F4到.cpp文件中
设置端口号,波特率功能
上面的是界面COM5…9(ui->CBoxSerialPort->addItem(“COM5”)😉
下面的是端口功能(mSerialPort.setPortName(“COM1”);)
在这里插入图片描述同理设置校验位,数据位,停止位功能
在这里插入图片描述
设置打开功能模式只支持读 读写 只读
在这里插入图片描述


2.2验证打开模式功能

为了验证你的open函数是否打开

2.2.1 通过手动方式打开

点击我的电脑右键,打开管理
在这里插入图片描述

点开设备管理器,串口COM1存在


2.2.2写函数判断(使用isopen()函数判断)

如果打开成功,QDebug输出串口打开成功!调用了QDebug所以文件要加入#inclue

在这里插入图片描述在这里插入图片描述


2.3测试打开功能

测试效果
编译ctrl+b运行ctrl+r
测试成功

在这里插入图片描述


2.4串口的发送功能

一切皆文件,物理设备同理,所以串口(设备)也有写的函数
串口的发送功能
可以看到write有三个承载函数,用第一个函数
在这里插入图片描述


2.4.1测试串口发送功能

给串口发送hello world!字符串,测试效果,编译ctrl +b 运行ctrl +r

在这里插入图片描述
没有效果,测试失败
在这里插入图片描述


2.5下载虚拟串口和串口助手再次测试串口发送功能

这个时候需要用到虚拟串口了,建议读者自行下载虚拟串口和串口助手来测试功能

虚拟串口,一个发送数据,一个接受数据
可以看到我们COM1和COM2是一对串口,所以我们在COM1写入的数据,COM2能读取到,用到串口助手调到COM2,COM1发送的hello world,COM2便能读取到

在这里插入图片描述
打开串口助手端口号设置成COM2
编译运行我们刚才的程序ctrl+b ctrl + r
可以看到串口助手收到数据hello world
测试成功

在这里插入图片描述


END

系列文章目录

QT串口助手开发1之绘制界面



一、QT串口助手开发

1.1创建QT程序

首先需要创建QT程序
创建QT程序的时候,记得点下创建页面,基类选择成Dialog
创建好QT程序后,编译ctrl + b ,运行ctrl + r ,弹出窗口


1.2更改窗口名字

更改窗口名字变成串口调试助手,更改windowTitle即可更改成窗口名字
在这里插入图片描述


1.3绘制串口助手页面

选中Combo Box 和 Label(标签),复制成5份
Combo Box的用法

在这里插入图片描述


1.3.1水平布局

绘制页面对齐很花费时间,第一行是水平没对齐,使用快捷方法对齐
选中该行,点击该按钮(水平布局),便可以水平对齐了
这个时候着两个控件就变成一个整体了,可以一个整体的拖动
在这里插入图片描述
ctrl + r 运行下看下效果,红色框是提醒水平布局的框,不会出现在运行里面
在这里插入图片描述


1.3.2垂直布局

在这里插入图片描述在这里插入图片描述ctrl + r运行测试下效果

在这里插入图片描述可以拖拉,达到你想要的效果

在这里插入图片描述

ctrl + r 运行下效果
在这里插入图片描述


1.4绘制打开发送按钮

需要用到2个push button控件,让其垂直布局,ctrl + r 运行下

在这里插入图片描述
这样绘制出来不好看,可以选中这两个控件,ctrl + z 撤销
添加Vertical Spacer(涨位符),撑开一部分空间,这样可以让两个按钮隔开更宽的距离
在这里插入图片描述
ctrl + r运行测试下效果

在这里插入图片描述
在添加一个Vertical Spacer在按钮和选择框之间,更加美观

在这里插入图片描述ctrl + r 运行下效果

在这里插入图片描述


1.5绘制接收数据文本框和发送数据文本框

Line Edit行文本框,太小了(只有一行),用Text Edit 或者Plain Edit,我两个都是用的Text Edit
两个Text Edit垂直布局,则会一样大
在这里插入图片描述
我们需要一个大一个小(接收界面大,发送界面小)
SizePolicy尺寸策略,两个Text Edit垂直伸展系数都相同
在这里插入图片描述

里面更改垂直伸展系统再垂直伸展的时候,就可以实现一大一小的效果了

在这里插入图片描述
大概6:1的效果最好看,所以我调制垂直伸展系数为6:1,效果如下

在这里插入图片描述
再添加下占位符,更加美观

在这里插入图片描述
ctrl + r 运行测试下效果

在这里插入图片描述

为了更加美观,再添加一个水平占位符,整体做水平布局,并且鼠标拖拉下达到美观即可

在这里插入图片描述

并ctrl + r 运行查看效果,读者觉得不美观也可以自行更改下

在这里插入图片描述


END

系列文章目录

QT串口助手开发2之串口程序编写



一、前期准备工作

1.1给选择框添加子选项

书接上文
绘制好界面后,需要给每个控制命个名,再继续编写串口程序
直接对label直接更改标签名字即可同理pushbutton
设置选项框里面的子选项,设置波特率,串口号用程序的方式动态识别
设置方式见设置选项框的方法
在这里插入图片描述
同理校验位,数据位,停止位

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


1.2给控件命名ID

点击串口号后面的Combo Box 控件给其ID为cboxSerialPort
同理波特率更名为CboxBaudrate
校验位更名为CboxParity
数据位更名为CboxDataBits
停止位更名为CboxStopBits
pushbutton更名为打开和发送
Text Edit命名为TeditRecv、TeditSend
在这里插入图片描述
ctrl + r运行看下效果,如果觉得不是很好看,就在SizePolicy调整策略
在这里插入图片描述


二、自动识别系统端口程序

自动识别当前系统有效的端口,让你选择(在串口号那栏有子选项可以选择)
去帮助文档查看帮助文档查看方法
首先需要给头文件加功能模块可参考文档
在这里插入图片描述在这里插入图片描述

QList列表里的每个成员都是SerialPortInfo,其实这个表就是有效端口的列表
类内的静态成员,可以直接通过类来调用不需要对象,直接调用就是两个::
availablePorts()这个函数返回一个列表到serialportInfo
接下来遍历这个列表,把列表里面的内容填到串口号后面的combo box里面去
帮助文档查看QList(列表或者数组)如何使用当作一个数组访问
在for循环里面,返回一个数组下标,at返回一个串口的信息
最详细写法参考参考写法

ctrl + r运行测试效果
在这里插入图片描述
测试成功,再添加2个模拟串口测试

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
ctrl + r 运行,测试成功
在这里插入图片描述


三、响应打开函数

参考文章添加链接描述
右键点击打开按钮转到槽
在这里插入图片描述
在这里插入图片描述
当打开按钮按下后,其余比如波特率…等等这些就不能在选择子选择,按钮就变成断开按钮类似这样
在这里插入图片描述m开头是类内成员
在这里插入图片描述在这里插入图片描述

写个函数,alt + enter 鼠标放在写的函数上,选择添加一个定义,界面就跳转了
这样就可以不用直自己写一个函数

在这里插入图片描述
我们要获取5个配置

在这里插入图片描述
并且设置进去(转到头文件)
在这里插入图片描述

再写其类内的成员
在这里插入图片描述
写.cpp文件
默认情况就是115200,你没选择波特率就是115200,以免没设置波特率

在这里插入图片描述同理写其它位
校验位只写三种去除两种,太麻烦了(在ui界面也去掉)
这两种去掉
在这里插入图片描述
写.cpp文件
在这里插入图片描述

同理其它位

在这里插入图片描述

停止位:

在这里插入图片描述
写完后要返回open的结果

小灯泡是修改该函数类型后,.h文件也要更改(函数的声明),点下小灯泡跳转到.h文件并且自动帮你更改
.cpp是函数的实现
在这里插入图片描述
更变成功

在这里插入图片描述

在构造函数中初始化下mIsOpen,默认情况下是关闭
open按钮的槽函数可以响应open单击的动作
点击打开这个按钮后,调用getSerialPortConfig函数,当这个函数返回true说明这个串口打开成功,否则打开失败,这个时候才能设置mIsOpen成员true or false(这个时候才是真正打开串口或者没打开串口)
但是我们打开串口按钮打开后只能选择关闭串口,所以这个是循环的过程,下文再书写如何编写串口程序,该问题留给下文

在这里插入图片描述


END

系列文章目录

QT串口助手开发3串口开发



一、UI界面程序的编写

根据上文的未解决问题:我们打开串口按钮打开后只能选择关闭串口,所以这个是循环的过程
上文链接
所以按钮对应的槽函数首先必须判断当前串口助手是否打开了助手,closed以后要把按钮的状态恢复成打开,修改mIsOpen标志位为False

在这里插入图片描述

否则执行我们写的getSerialPortConfig获取位(数据位…)成功,按钮状态是打开,并且按钮要更新为关闭(并且位的下拉框要变成灰白色不再可以调位下拉框了),如果没有获取成功则按钮状态是关闭的
在这里插入图片描述

禁止使用下拉框就成灰白色了

在这里插入图片描述

代码如下:

在这里插入图片描述

测试下信息,加个QDebug头信息

在这里插入图片描述在这里插入图片描述

ctrl + r运行测试效果

在这里插入图片描述在这里插入图片描述

我们需要打开按钮打开后才能点击发送按钮

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其实还可以直接把mIsopen填进去这样就不用思考填true或者false

在这里插入图片描述在这里插入图片描述在这里插入图片描述
ctrl + r 运行测试效果
当你没有打开串口的时候发送按钮是灰色的(不能发送),当你打开串口的时候,发送按钮是可以发送的
在这里插入图片描述在这里插入图片描述

二、发送框程序编写

发送按钮转到槽函数,详情槽函数可以参考文章槽函数

在这里插入图片描述
在这里插入图片描述比如TeditSend函数不会用,就再帮助文档查TeditSend函数,帮助文档使用方法参考文档添加链接描述

由于这个toPlainText()这个函数是Qstring类型,所以我们需要变更下它的函数类型为char*,再帮助文档中查看Qstring函数的用法
在这里插入图片描述Qstring先转换成标准的c++string,然后再用c_str转换成char*
ctrl + r 运行测试下效果
在这里插入图片描述
同理写接受框,COM2给COM1发送数据时,这时接收框没有反应
在这里插入图片描述
接收框程序写法:
平常都是再ui转到槽函数,这个是从设计界面,如果我们连接到串口,需要用代码的方式连接
connect是连接信号和槽,信号发送者是mSerialPort,发送信号Readyread,发送给槽(先自定义下)的槽
slots槽函数
在这里插入图片描述
ALT + ENTER选择添加定义
在这里插入图片描述
在这里插入图片描述

再写槽函数里面读取串口
当串口有数据的时候,就会发送ReadyRead这个信号,槽函数就会响应,就会读取串口,然后设置到接收文本框里面

在这里插入图片描述ctrl + b编译ctrl + r测试下效果
在这里插入图片描述一直发送都是一个hhh
因为我们之前设置的槽函数,一旦有数据就会读取并且发送到接收框,这样每次发送都是会覆盖掉前面发送的,我们不想要覆盖,所以再点开帮助文档,查看texyedit函数或者直接搜索关键字append,查看到append的槽函数,槽函数依旧是函数可以直接调用
所以把setPlaintext函数变更成append函数即可
在这里插入图片描述ctrl + r 运行测试效果
在这里插入图片描述清除功能,查看帮助文档,搜索clear,可以自行添加


END
在这里插入图片描述

文章来源:https://blog.csdn.net/westos_yanzheng/article/details/135630064
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。