嵌入式学习之QT学习---5 QT上位机开发之串口助手(上)

1、qt的三驾马车

  • qt下的串口编程
  • qt下的网络编程
  • qt下操作GPIO

2、设计ui界面

设计ui界面之前,需要新建一个QT工程,简要再回顾一下创建QT工程的步骤:new project—》application—》Qt widgets application—》写入名字,选择路径—》基类选择“QWidget”。
创建好QT工程之后,先编译一下,看会不会报错,不然万一有错误,等到最后全部搞完的时候再去编译,如果有报错,都很难排错。上次我就是基类选错了,最后编译的时候报错,明明每一个环节都没错,直到第二天才想起来一开始的时候我就把基类选错了,哭辽.
(1)首先打开ui文件,根据下图的标准串口助手的界面去选择要使用的控件,我们从标准串口界面可以看到,想要设计一个串口助手,需要包含“接收端”、“发送端”、“串口号”、可选择的波特率等。
在这里插入图片描述

  • 接收框:接收其它设备发来的数据,这里选择的控件是“Input Widgets----》Plain Text Edit
  • 发送框:“Input Widgets----》Line Edit
  • 可选择的波特率:“Input Widgets----》Combo Box
    在这里插入图片描述
    (2)界面布局以及禁止接收框写入数据
    放好控件之后,进行编译和运行。编译运行之后,结果如下图所示,但是我们发现,在发送框可以写入数据,同时在接收框也可以写入数据。在接收框可以输入数据这个就有问题啦,因为接收框是不能操作的。一般的串口工具在接收框输入数据的时候就会报错!
    在这里插入图片描述
    修正一下,将接收框的属性改为只读的就可以啦。
    选中“接收框–勾选QPlainTextEdit(readonly)”即可。操作完成之后,重新编译运行,发现现在的接收框就不可以被写入数据啦。
    在这里插入图片描述
    ui界面的设计大致就是现在的样子啦,下一步,给ui界面布局(小红色方框里的控件先水平布局,再垂直布局;黑色方框-水平布局;黑色与发送框、广告框垂直布局;垂直布局后的小红色方框与垂直布局后的发送框、广告、按钮水平布局;整个ui界面栅格布局。),并且设置最小宽度(将自制串口助手所在的控件的最小尺寸设置成了150x50)。编译运行结果如下,ui界面就基本完成啦。
    在这里插入图片描述
    (3)接下来,给控件编辑它应该实现的功能,步骤如下:
    在这里插入图片描述
    利用该方法分别给控件编辑选项,波特率(4800,9600,115200)、数据位(5,6,7,8)、停止位(1,1、5,2)、校验位(none),编译运行一下查看效果:
    在这里插入图片描述
    效果可以的,但是出现了一个小问题,这里的布局有点乱啦,重新布一下局,回到ui文件,打破布局,将串口号以及其属性选择框等一系列相关的框给它们进行栅格布局。(红色框内的进行栅格布局,接着将黄色框内的给它水平布局)
    在这里插入图片描述
    这次布局之后就很整齐美观啦。在这里插入图片描述
    (4)设置可选择参数的默认值
    在标准的串口助手里面,有一些默认的值,比如:定时发送、HEX显示以及HEX发送,以及一打开串口助手就会在波特率等地方也显示常用的参数,这个我们应该如何实现嘞?
    比如波特率的常用参数为115200,选中波特率的属性选择控件,在属性编辑器里面找到currentIndex,可以看到第0位对应的是4800,所以相应的115200在刚才的项目里面排位为2(刚才项目里从0-2对应的是4800,9600,115200),故将此处的参数改为2试一下。编译运行结果中会自动在波特率一栏中选择115200.
    在这里插入图片描述
    同样的方法,将数据位默认值设置为8,停止位默认值设置为1,校验位设置为none。
    在这里插入图片描述
    (5)还需要写入串口号,串口号需要通过代码来实现。
    在写代码之前,需要给控件修改名字,避免在编写.cpp文件代码的时候对应到ui界面出现混乱,分不清楚哪个控件对应什么功能。在这里插入图片描述

qt串口这里需要用到一个很关键的类serialport,要现在.pro工程文件里面添加该模块(在QT += core gui 代码后面加上该模块)

QT       += core gui serialport

添加完之后编译一下,看看有没有错误,没有错误的话再继续进行。
接下来,使用代码将串口号给加进去。打开“widget.cpp文件”,对文件进行编写和修改。

#include "widget.h"
#include "ui_widget.h"
//包含头文件
#include <QSerialPortInfo>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //先定义一个QStringList

   QStringList serialNamePort;
   foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
       serialNamePort << info.portName();
       //QSerialPortInfo是串口的信息类,是存放串口信息的。
       //QSerialPortInfo::availablePorts是自动搜索当前的可用串口,其返回值是一个数组,数组的元素是QSerialPortInfo类型的
       //然后将返回值加到了QStringList这个二维数组里面。
   }
   ui->serialCb->addItems(serialNamePort);
   //将代码实现的功能显示在ui界面里面,这就是为啥刚才改名字。

}
//通过这段代码就可以把当前搜索的可用的串口在ui界面显示出来

Widget::~Widget()
{
    delete ui;
}

把购买开发板的时候送的U转串的线插到电脑上,然后编译运行该工程,就看到有自动匹配的COM3串口号了。
在这里插入图片描述

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值