QT实现简易串口助手

news/2024/9/20 15:27:34

简易串口助手界面设计

自定义了QWidget的派生类SerialPortWidget,其界面设计大致如下:

效果图:

项目结构

serial_port└─│  main.cpp					//主程序│  mainwindow.cpp			//主窗口源文件和头文件│  mainwindow.h│  myintvalidator.cpp		//QIntValidator的派生类,重写fixup()│  myintvalidator.h│  mysetting.json│  res.qrc					//资源文件,添加css、图片文件│  serialportwidget.cpp		//QWidget的派生类,在其中串口的读写│  serialportwidget.h│  serial_port.pro			//工程文件│  serial_port.pro.user│  setting.json				//程序自动创建用于保存各种设置│      ├─image						//存放图片│      closebtn.png│      closebtn2.png│      openbtn.png|	   logo.ico|      windowicon.png│      └─style						//存放qss/css文件mystyle.css

使用json文件保存参数,比如某个复选框是否被勾上,是否显示时间,文本浏览器背景色等等,有关json文件的读写,这篇博客写的不错:https://blog.csdn.net/cpp_learner/article/details/118421096

部分代码

串口助手的核心部分就是串行通信。

QSerialPort类

QSerialPort提供了一些函数去访问串口。

Provides functions to access serial ports.

获取串口名

QSerialPortInfo类可以获取已存在串口的信息:串口描述、串口名、制造商、串口序列号等。使用静态函数QSerialPortInfo::availablePorts()获取所有的串口信息,再通过foreach遍历每个串口的信息。

Provides information about existing serial ports.
Use the static functions to generate a list of QSerialPortInfo objects. Each QSerialPortInfo object in the list represents a single serial port and can be queried for the port name, system location, description, and manufacturer. The QSerialPortInfo class can also be used as an input parameter for the setPort() method of the QSerialPort class.

//获取串口信息
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo &info : infos)		//foreach遍历串口信息serialPortComboBox->addItem(info.portName());   //获取串口名

从串口读取数据

QSerialPort *serialport = new QSerialPort;
//串口参数的设置,具体的值参照QT官方的文档
serialport->setPortName(portName);	//设置串口名
serialport->setBaudRate(b);	//设置波特率
serialport->setDataBits(databits);	//设置数据位
serialport->setStopBits(stopbits);	//设置停止位
serialport->setParity(parity);	//设置校验位if(!serialport->open(QIODevice::ReadOnly))	//只读方式打开文件失败
{qWarning() << "open serial port error";return;
}
QByteArray data = serialport.readAll();	//以字节的方式读取数据

向串口写数据

if(!serialport->open(QIODevice::WriteOnly))	//只写方式打开文件失败
{qWarning() << "open serial port error";return;
}QByteArray data("hello");
serialport.write(data);	//向串口写数据,需要先设置相关的参数

关闭串口

serialport.close();

项目打包成exe

见另一篇博客:https://www.cnblogs.com/qianxiaohan/p/18237089

测试结果

使用Virtual Serial Port Driver添加一对虚拟串口,COM2 <==> COM3。

自制的简易串口助手选择COM2,另一个串口助手选择COM3,以此来测试自制的简易串口助手。可以看到简易串口助手可以正常地实现数据的收发。

项目地址:https://github.com/qianxiaohan/QTProject/tree/main/serial_port

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

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

相关文章

GraqphQL 学习

GraphQL是Graph+QL。Graph是图,描述数据最好的方式是图数据结构(包括树),数据和数据之间,有像图一样的联系,以图的思维来考虑数据。QL是query language,像写query语句一样请求数据,query什么数据,就返回什么数据。怎样用图的方式来描述数据?定义Schema(类型), type 类…

Android :安卓学习笔记之 Handler机制 的简单理解和使用

目录Handler机制1、Handler使用的引出2、背景和定义3、作用和意义4、主要参数5、工作原理及流程5.1、对应关系6、深入分析 Handler机制源码6.1、Handler机制的核心类6.2、核心方法6.3、方式1:使用 Handler.sendMessage()6.3.1、 创建Handler类对象6.3.1.1、隐式操作1:创建循…

try_catch处理异常

try_catch使用不影响其他功能的使用 这点比无脑throws强 public class Demo06Exception { public static void main(String[] args){ String s="a.txt"; try{ add(s); } catch (FileNotFoundException e){ System.out.println(e); } delete(); updata(); find(); } …

麒麟v10 SP2系统容器化部署MySQL、RabbitMQ、redis-ha-haproxy等出现OOMkill内存异常升高问题处理

问题场景 操作系统:麒麟系统v10 SP2 k8s版本:v1.23.17 容器运行时:containerd Rabbitmq镜像版本:3.9.11-debian-10-r0(3.11.10-debian-11-r0版本已正常) Mysql镜像版本:mysql_5.7.37-debian-10-r95(8.0.20版本已正常) redis-ha-haproxy镜像版本:haproxy:2.0.22-alpin…

2024.6.24 CTF MISC 任务清单

题目: 黑客帝国 https://buuoj.cn/challenges#%E9%BB%91%E5%AE%A2%E5%B8%9D%E5%9B%BD 打开发现是txt文档 看起来像是16进制的,我们把它挪到 010 中 此时出现了 rar 的标志,说明要保存为 .zip的形式 于是破解了密码,但是图片显示错误 从网上搜到的结果可知: PNG(png)文件…

【Playwright+Python】系列教程(二)手把手带你写一个脚本

一、如何使用代理方式打开网页 在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下: 1、同步写法: from playwright.sync_api import sync_playwrightproxy = {server: http:/127.0.0.1:8080}def run():with sync_playwright() as p:browser = p.chromium…

【游记】中考后SH四日游

中考后SH四日游6.22 6.23本来接下来还有拍摄的东方明珠旁云彩的移动的,体验到了什么是“风云变幻”,但由于是视频,懒得传了。6.246.25 6.26 6.27本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18265950,未经允许严禁转载。 版…

(Redis 理论与实践学习)Redis的数据结构:String类型

目录String的主要实现内部编码模式何为简单动态字符串SDS的底层实现C语言字符串和SDS的区别, SDS的优点有哪些?常数获取字符串长度避免缓冲区溢出,通过对数组的扩增实现空间增大合理的资源分配,减少内存分配的次数扩增时的空间预分配缩短时的惰性空间释放二进制安全总结一下…