当前位置: 首页 > news >正文

P4 QT项目----会学串口助手(解析笔记)

一.第一步打开串口和关闭串口

打开串口之前需要完成以下参数配置

1.配置串口2.配置波特率3.配置数据位4.配置校验位5.配置停止位6.配置流控7.打开串口8.关闭串口

配置完以上参数才可与串口连接上,打开串口后,以上参数不可修改,需要关闭串口才可以修改

(QMessageBox类)当打开串口失败需要提示失败的原因,以及打开成功在会学串口助手左下角显示COMx Is Open!

二.发送按键

1.需要将横线里面的内容读取

2.判断发送按键是否按下,按下则发送,否则未发送

3.发送成功在左下角显示Send OK!

4.记录发送数据的大小

5.发送新行,检测新行按键是否按下,在字符串后面添加\r\n

三.定时发送(QTimer类)

1.在ui界面将按键转为槽函数(bool类型)

2.定时需要定时器,定义一个定时器

3.连接一个信号与槽函数

使用 C++11 Lambda表达式 connect(sender, &Sender::signal, [=]() { /*执行函数 */ });

                                connect(timer,&QTimer::timeout,[=](){ on_pushButton_Send_clicked(); });

4.按下时将定时器开启,关闭时将定时器停止(结束发送)

四.HEX发送(QByteArray类)

1.hex发送需要满足两个要求

(1)判断横线的字符串是否为偶数位:方式 :字符串%2

(2)判断横线的字符串是否满足HEX进制表达 :用函数判断:std::isxdigit(字符串)

满足这两个要求即将横线的字符串转为HEX进制的字符

五.接收(QSerialPort类

1.如何接收发送的内容显示在TextEdit上?

QSerialPort类继承QIODevice类有个信号readyRead(),需要在串口上进行信号与槽的绑定

connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

connect(serialPort,&QSerialPort::readyRead,this,&Widget::on_serialData_readyToRead);

在槽函数里面接收一个端口发送的字符串,将字符串打印在TextEdit上。

2.如何接收显示HEX进制的内容QByteArray类)

(1)将新接收的数据进行类型转换成HEX(QString->QByteArray)

(2)把原来在TextEdit的文本提取出来

(3)将文本进行拼接TextEdit(QString->QByteArray) + 新接收的数据

六.清空接收

1.在ui界面中将该按键转为槽函数,清空接收的文本,即将文本设置位“ ”空。

七.保存接收(QFileDialog类

1.将文本定义一个QFileDialog类的QFileDialog::getSaveFileName,得到保存的地址以及文件的类型。

2.打开文件(只写和文本模式)

3.输入文件的内容

4.关闭文件

八.接收时间(QDateTime类

1.获取时间:QDateTime currentTime = QDateTime::currentDateTime(); /* 获取当前的日期 */

2.获取日期(年月日):QDate date = currentTime.date();

3.获取时间(时分秒):QTime time = currentTime.time();

4.显示在列表Mytime = QString("%1-%2-%3 %4:%5:%6")          .arg(year,2,10,QChar('0')).arg(month,2,10,QChar('0')) .arg(day,2,10,QChar('0'))          .arg(hour,2,10,QChar('0')).arg(minute,2,10,QChar('0')) .arg(second,2,10,QChar('0'));

5.调用一个信号与槽函数connect(getSysTimer,SIGNAL(timeout()),this,SLOT(time_Reflash()));将1,2,3,4在槽函数里面获取,及显示在文本上。

6.在接收函数为非HEX进制显示,判断该checkBox接收时间是否按下,在接收文本前加上时间Mytime+字符串 进行显示。

九.自动换行

1.在接收函数显示,判断该checkBox接收时间是否按下,在接收文本后加上字符串+\r\n 进行显示。用rev.append(“\r\n”)

十.隐藏面板,隐藏历史

1.在ui界面中将该按键转为槽函数(含有bool类型),清空接收的文本,接收历史面板隐藏

十一.多文本发送

1.每个按键都建立槽函数,但是这样代码过长,不方便管理

2.利用数组将每个按键遍历出来。

(1)建立一个全局数组 QList<QPushButton *> buttons;

(2)利用一个for循环遍历9个按键

(3)将每个按键的名字打印出来(QString类型)

(4)用QPushButton *btn = findChild<QPushButton *>(按键的名字)(QObject类)函数,找到ui界面时哪个按键按下

  (5)将找到的btn添加到buttons的数组里面

(6)建立一个按键的信号与槽函数:connect(btn,SIGNAL(clicked()),this,SLOT(on_commandButtonClicked()));

  (7)找出发送信号的按键QPushButton *btn = qobject_cast<QPushButton *>(sender());

(8)定义一个数字获取哪个按键的序号:int num = btn->property("buttonID").toInt();

(9)重新构建lineEdit,checkBox,以num为遍历9个lineEdit,checkBox与pushButton对应

(10)调用发送函数实现功能

十二.多文本定时发送

与定时发送一致

十三.多文本重置按键(QMessageBox类

1.点击重置按键提示是否要重置文本内容(是与否)

2.重置文本

(1)清空lineEdit里面的内容

(2)HEX复位

十四.多文本保存(QFileDialog类

与保存接收一致

十五.多文本载入(QFileDialog类

1.将文本定义一个QFileDialog类的QFileDialog::getOpenFileName,得到打开的地址以及文件的类型。

2.打开文件(只读和文本模式)

3.遍历9个lineEdit,checkBox并读取的内容

4.关闭文件

相关文章:

  • Oracle 条件索引 case when 报错解决方案(APP)
  • 铸铁平台的制造工艺复杂而精细
  • 探索铸铁试验平台在制造行业的卓越价值
  • keil5怎么关闭工程
  • vue2为什么不能检查数组的的变化,改怎样解决
  • LeetCode 3423. Maximum Difference Between Adjacent Elements in a Circular Array
  • 【Zephyr 系列 20】BLE 模块产线测试系统设计:快速校验、参数写入、自动识别的完整方案
  • 数字签名CA数字证书
  • 树莓派5实现串口通信教程
  • Karate整合PlayWright方式之playWright Driver
  • mysql 关联表查询,索引失效
  • AI常用工具指南
  • 如何在网页里填写 PDF下拉框
  • std::sort 默认排序方式
  • 多模态大语言模型arxiv论文略读(119)
  • 燃气从业人员资格证书:职业发展的 “助推器”
  • Java八股文——MySQL「存储引擎篇」
  • SX1268低功耗sub-1g芯片支持lora和GFSK调制
  • 25年春招:米哈游运维开发一面总结
  • Vue3学习(6)-Vue3的生命周期和自定义hook
  • 江苏建设主管部门网站/成都网站seo厂家
  • 外贸海外网站推广/优化人员配置
  • 网站建设合作流程/seo免费入门教程
  • 网站开发用什么技术asp/seo搜索优化招聘
  • seo1网站查询/网络营销概述
  • 重庆工程建设信息网安全监督/北京seo如何排名