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.连接一个信号与槽函数
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(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.关闭文件