概述
【QT 5 调试软件+串口相关初试串口+基础样例】
- 1、前言
- 2、实验环境
- 3、先行文章+布局相关
- 4、基本了解+串口相关
- (1)了解串口
- (2)串口的相关参数
- (3)了解信号与槽
- 5、实验过程+代码编写
- (1)引入串口文件
- (2)加入声明和引入头文件。
- (2)查找串口
- (3)按键打开串口
- (4)读取函数
- (5)发送按键编写
- 6、实际调试
- 7、代码链接
- 8、细节点
- 9、总结
1、前言
作为qt的初学者,开始入门qt的时候,很多东西其实也不是很会,也是边学边干,自己学习的很多东西,值得记录下来,也方便他人学习。
另外,本次实验是调试串口,我们还是需要一个硬件设备的支持的。建议调试前,先弄个转换器,就是usb转TTL的,便宜的也有很多,一般来说,只要玩单片机,不会没有。
2、实验环境
实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样。
系统环境:window环境
QT软件版本:qt 5.14.2
硬件设备:转换器-USB转RS232
如下图所示,本次调试,我们直接将转换器的RX和TX短接。这样我们发啥就会收到什么。
然后我们用串口软件测试一下,如下图。
3、先行文章+布局相关
其实对于一个软件而言,或者我们做这个软件,自己测试用,那怎么方便怎么来了,但是对于给他人,其实有很多细节点得。
咱们自己用,也需要注意一些问题。而这种上来就带界面的,我们不会去像调试单片机一样,上来纯写代码,当然,如果你界面也纯用代码写,当我没说。
所以我们qt写调试串口是,第一步,是布局,扣界面。具体布局我之前也写过,本次也是调用那篇的代码,不重复造轮子了。
【QT 整体窗口拖动大小,内部控件无法跟随改变的原因>>>>>解决:布局相关,布局设置】
4、基本了解+串口相关
(1)了解串口
关于串口相关知识,我们上网搜索"qt 串口"其实有很多,这里就加以罗列了,不过可以去看看 QT官网关于串口的说明,这有助于我们编写代码。
链接:https://doc.qt.io/qt-5/qserialport.html
如图下图,其实我们可以大致了解串口相关的枚举类型,或者说,我们编写代码时候,需要关心的参数。
(2)串口的相关参数
其实我们只要打开一个串口软件,就大致知道需要关心那些参数了。如下图, 我们需要设置:串口号,波特率,停止位,数据位,校验位,一般还有带个按钮,打开串口。
(3)了解信号与槽
几乎写qt,或者学习QT,几乎绕不开,这些概念,信号与槽,可以多查查了解,这里不多做赘述,我们以实验为主。
个人理解:
信号:产生信号,发送出信号。
槽:接收信号,执行相应动作。
打一个比方,用单片机来说,就好像你用一个按键控制小灯开关,那么按键就是信号的生成者,小灯就是执行者。
放置qt里就是,当一个按键按下去的时候,会发出一个信号,信号会给相应的函数,去执行动作。
5、实验过程+代码编写
这篇文章中,是借用以前实验的代码,下载下来后,直接编译,没有错误后,可以进行了。
(1)引入串口文件
文件:xxx.pro 文件下,我的工程内文件名为:test_dome.pro
引入串口相关库,代码”QT += serialport“。
(2)加入声明和引入头文件。
文件:xxx.h 文件下,我的工程内文件名为:widget.h
加入串口头文件,并声明函数与类名字。
(2)查找串口
(1)一种方式是,打开软件后,立刻查找串口,但是有时候,我们可能会有多个串口,或者是先打开串口软件,然后搜索。这个时候我们需要增加一个按键,用来手动搜索串口。
如同我们点击 widget.ui文件,点击一个按键,修改名称。
(2)右键点击这个按键>>转到槽>>选择第一个触发函数。
(3)触发函数如下图
(4)函数内加入如下代码
(5)这个时候,去widget.h文件里,我们就会发现,多了一个名为”on_pushButton_2_clicked“函数。
(6)在软件打开时,读取一次串口。
(3)按键打开串口
我们依次操作剩余两个按键,这里操作和上述相同。
(1)”打开出串口“按键
代码内容如下
void Widget::on_pushButton_clicked()
{
if(ui->pushButton->text()==QStringLiteral("打开串口"))
{
serial_flag=true;
serial =new QSerialPort;
//获取串口
serial->setPortName(ui->comboBox->currentText());
//设置读写
serial->open(QIODevice::ReadWrite);
//设置波特率
serial->setBaudRate(115200);
//设置数据位8位
serial->setDataBits(QSerialPort::Data8);
//无校验位
serial->setParity(QSerialPort::NoParity);
//1个停止位
serial->setStopBits(QSerialPort::OneStop);
//设置流
serial->setFlowControl(QSerialPort::NoFlowControl);
ui->comboBox->setEnabled(false);
ui->pushButton->setText("关闭通信");
QObject::connect(serial,&QSerialPort::readyRead,this,&Widget::Read_Data);
}
else
{
serial_flag=false;
serial->clear();
serial->close();
serial->deleteLater();
ui->comboBox->setEnabled(true);
ui->pushButton->setText("打开串口");
}
}
(4)读取函数
在这里,如下图,我们做了一个连接>>信号与槽,如果打开串口,那么就去读取函数获取数据。
(1)编写读取函数
代码块
void Widget::Read_Data()
{
QByteArray buf;
buf=serial->readAll();
if(!buf.isEmpty())
{
//获取当前textEdit内得内容 并新建字符串
QString str=ui->textEdit->toPlainText();
//加上收到buf内容
str+=tr(buf);
//清楚文本框 textEdit内容
ui->textEdit->clear();
//追加str内容
ui->textEdit->append(str);
}
}
(5)发送按键编写
按键也是需要连接槽,本片是基础篇,我们直接写死。
(1)转到槽
(2)内容增加
6、实际调试
插好硬件,我们测试下。
7、代码链接
代码连接:https://download.csdn.net/download/qq_22146161/86722251
8、细节点
有很多细节点,这些调试中,遇到的问题估计可以单独写一篇了。
(1)找不到文件错误:”error: ‘QSerialPort’ file not found“。
解决方式:简单说就是没有这个文件,忘记保护库了。
(2)程序异常结束:如下,程序正常启动了,但是直接点击==“发送消息”==
如下图所示:报错:The process was ended forcefully.
解决办法:或者说一类问题解决办法,没声明的类不要用。
如图,我这里加入标志位判断下,直接打开串口后,才能发送。
9、总结
使用qt调试串口,我打算做个系列,这样学习有个过程,另外其中遇到的问题,我打算单独列个文章说明。
最后
以上就是高贵鸡翅为你收集整理的【QT 5 调试软件+串口相关初试串口+基础样例】1、前言2、实验环境3、先行文章+布局相关4、基本了解+串口相关5、实验过程+代码编写6、实际调试7、代码链接8、细节点9、总结的全部内容,希望文章能够帮你解决【QT 5 调试软件+串口相关初试串口+基础样例】1、前言2、实验环境3、先行文章+布局相关4、基本了解+串口相关5、实验过程+代码编写6、实际调试7、代码链接8、细节点9、总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复