QT--学习教程一之串口上位机(源码均有注释)

第一次写博客,请多指教,不喜勿碰。
本人一直在做硬件设计开发,在上位机设计这块一直是空白,最近看到朋友写几行代码就轻轻松松挣外快,决定入坑上位机设计。
参考朋友的意见从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
欢迎关注公众号:云翔科技教学平台,对应的资料公众号会发布。
4
有什么不懂的地方也可以联系技术支持微信:
4

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌智君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值