Qt5学习笔记之串口助手四:增加16进制/ASCII切换周期发送
Posted 何事误红尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt5学习笔记之串口助手四:增加16进制/ASCII切换周期发送相关的知识,希望对你有一定的参考价值。
目录
1. 概述
距离上次起意学习Qt已经过去了好久,最近又萌生了自己写工具的想法。真的是间歇性踌躇满志,持续性混吃等死。。。
前面跟着课程做了个串口工具的demo,实现简单的收发。这个工具还很简陋,无法满足正常使用。本文开始,为串口工具增加日常使用频率比较高的一些功能,如16进制/ASCII发送、周期发送、接收16进制/ASCII显示等。
先逐渐实现各个功能,最后再对界面进行重新布局。明确实现哪些功能–>调整界面布局–>依次实现功能,这样更好。不过自己学习嘛,想到啥功能就添加啥功能,天马星空,随意就好。
2. 16进制/ASCII发送
在Qt5学习笔记之串口助手一文的最后,测试我们输入的内容是以ASCII发送的。实际上输入的FF FF 4E 04 00 18 00 00 56 FF
是我们的自定义协议,需要按照16进制发送。
2.1 功能实现
QLineEdit是QString,也就是需要把QString转换为16进制数组,搜索了一下,好像没有专门的函数,不少人贴出自己的实现方式(如Qt字节数组和十六进制的相互转换)。我的想法是:
- 指令之间不输入空格,使用循环,每次裁剪len=2的小字符串,转换成16进制。
QString str1; str1 = str.mid(2 * i, 2);
- 考虑到有空格,输入更加直观。可以每次按照空格来切割字符串,就可以得到len=2的小字符串,分别转换成16进制。
QString str1; str1 = str.section(' ', i, i);
- 记录另一种切割方式
QStringList list1; int x, y, z; list1 = str.split(' '); x = list1 .at(0).toInt(); x = list1 .at(1).toInt(); x = list1 .at(2).toInt();
一边搜一边写,然后就发现不必自己实现。。。。
void Widget::on_sendBt_clicked()
//serialPort->write(ui->sendEdit->text().toLocal8Bit().data());
serialPort->write(QByteArray::fromHex(ui->sendEdit->text().toLatin1().data()));
参考链接:
Qt - 关于QByteArray存储十六进制 与十六进制互转
QString的toLocal8bit与toLatin1的区别
【QT】QString类型转换为const char*(toLatin1)
2.2 界面修改
界面上增加一个选择框,让使用者能够根据实际情况选择以16进制还是ASCII码发送。
选择框
3. 接收框显示发送内容
使用过程中,我们更希望在
3.1 以16进制/ASCII显示
转换为16进制
3.1.1 界面修改
3.1.2 功能实现
收到一帧数据,则发送回去
增加数据解析,
3.2 支持更多编码格式
暂不实现,占个位置。
4. 增加时间戳
增加时间戳,Qt5学习笔记之计时器一文中已经实现过,
4.1 界面修改
4.2 功能实现
5. 增加周期发送
5.1 界面修改
界面增加周期发送选项和周期设置
5.2 功能实现
以上是关于Qt5学习笔记之串口助手四:增加16进制/ASCII切换周期发送的主要内容,如果未能解决你的问题,请参考以下文章
串口调试助手-发送数据,按字符或16进制显示接收数据的C#程序