第一次写博客,请多指教,不喜勿碰。
本人一直在做硬件设计开发,在上位机设计这块一直是空白,最近看到朋友写几行代码就轻轻松松挣外快,决定入坑上位机设计。
参考朋友的意见从QT开始,QT 的安装就不详细介绍了,用的QT5.9.2,根据以往学习的经验,还是从一个实际的小东西入手写比较快,决定先写一个串口助手(有点小儿科)。去网上看了看,有很多人在分享串口助手,但是源码都没有注释,这就很难受了。于是参考别人源码,去重新写了一个(基本没变化,后期根据需要再补充),把每行都注释了一下,每个模块的去查询了一遍,大概对QT有了了解。
下面是部分代码:
/************************************************
* @functionName: show_portStateLable()
* @date: 2020-07-15
* @description: Null
* @return: Null
* @others: Null
*************************************************/
void MMSerialPort::show_portStateLable()
{
QString info = QString("RX^%0 RX^%0 Bytes").arg(rxCount).arg(txCount); // 设置显示接收、发送的数据数量
portStateLabel->setText(info); // 将其设置在界面上
}
/************************************************
* @functionName: slot_read_from_port()
* @date: 2020-07-15
* @description: 从串口读取数据
* @return: Null
* @others: Null
*************************************************/
void MMSerialPort::slot_read_from_port()
{
ui->lcdRevNum->display(ui->lcdRevNum->value()+1); // 显示接收数据的数量
if(ui->chk_showNo->isChecked()) // 显示序号使能
{
ui->plainTextEdit_rev->insertPlainText(QString("[%0]^")
.arg(ui->lcdRevNum->value())); // 插入序号
}
QByteArray byteArray = serial->readAll(); // 从串口读取信息
rxCount+=byteArray.length(); // 获取数据的长度
show_portStateLable(); // 将获取的数据长度显示出来
QTextCursor cursor = ui->plainTextEdit_rev->textCursor(); // 获取光标
cursor.movePosition(QTextCursor::End); // 移动到文本最后
ui->plainTextEdit_rev->setTextCursor(cursor); // 显示光标
if(ui->radio_accept_ascii->isChecked()) // 如果设置接收ASCII
{
ui->plainTextEdit_rev->insertPlainText(QString::fromLocal8Bit(byteArray)); // 对串口接收的数据进行编码
}
else if( ui->radio_accept_hex->isChecked()) // 如果设置接收 HEX
{
QDataStream out(&byteArray,QIODevice::ReadWrite); // 读取数据
while(!out.atEnd()) // 是否读取完成
{
qint8 outChar = 0;
out>>outChar;
QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0')); // 转换16进制
ui->plainTextEdit_rev->insertPlainText(str+" "); // 没显示一次后面加一个空格
}
//ui->plainTextEdit_rev->appendPlainText(byteArray.toHex()+" ");
}
if(ui->chk_auto_line->isChecked()) // 自动换行
{
ui->plainTextEdit_rev->insertPlainText("\n"); // 插入换行
}
}
完整的代码链接:
链接:https://pan.baidu.com/s/1tY-bC_WF_J2rxdhKjzSw1g
提取码:gppb
这一节到此结束了。
若有错误,欢迎指正,技术支持联系方式QQ : 2228398717
欢迎关注公众号:云翔科技教学平台,对应的资料公众号会发布。
有什么不懂的地方也可以联系技术支持微信: