【Qt开发】Qt5.7串口开发
QT5有专门的串口类:
QSerialPort:提供访问串口的功能
QSerialPortInfo:提供系统中存在的串口的信息
具体使用方法:
1.在pro文件中加入: QT += serialport
2.mainwindow.h中添加头文件及成员:
<code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <QSerialPort></span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <QSerialPortInfo></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:
QSerialPort serial;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//串口实例</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> initSeialPort();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化串口函数</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> slots://必须加slots
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">serialRead</span>(); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
3.在主窗口添加一个comboBox,一个label,初始化串口
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> MainWindow<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::initSeialPort</span>()
{
connect(<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span>serial,SIGNAL(readyRead()),this,SLOT(serialRead())); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//连接槽</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//获取计算机上所有串口并添加到comboBox中</span>
QList<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span>QSerialPortInfo<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> infos <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> QSerialPortInfo<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::availablePorts</span>();
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(infos<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>isEmpty())
{
ui<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>comboBox<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addItem(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"无串口"</span>);
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
}
foreach (QSerialPortInfo info, infos) {
ui<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>comboBox<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addItem(info<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>portName());
qDebug() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> info<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>portName();
}
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>
3.comboBox选择改变事件函数:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> MainWindow<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::on_comboBox_currentIndexChanged</span>(const QString <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span>arg1)
{
QSerialPortInfo info;
QList<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span>QSerialPortInfo<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> infos <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> QSerialPortInfo<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::availablePorts</span>();
int i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
foreach (info, infos) {
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(info<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>portName() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> arg1) break;
i<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span>;
}
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> infos<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>size ()){<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//can find</span>
ui<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>lblStatus<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setText(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"串口打开成功"</span>);
serial<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>close();
serial<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setPort(info);
serial<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>open(QIODevice<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::ReadWrite</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//读写打开</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// serial.setBaudRate(QSerialPort::Baud9600); //波特率</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// serial.setDataBits(QSerialPort::Data8); //数据位</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// serial.setParity(QSerialPort::NoParity); //无奇偶校验</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// serial.setStopBits(QSerialPort::OneStop); //无停止位</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// serial.setFlowControl(QSerialPort::NoFlowControl); //无控制</span>
}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{
serial<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>close();
ui<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>lblStatus<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setText(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"串口打开失败"</span>);
}
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li></ul>
4.串口发送
<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> MainWindow::on_btnSend_clicked()
{
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// QByteArray arr = "abcd";</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// serial.write(arr);</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> dat[] = {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x55</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x01</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x05</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xAA</span>};
serial.write(dat,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>);
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>
5.串口接收,需添加一个textEdit。
<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">void <span class="hljs-constant" style="box-sizing: border-box;">MainWindow::</span>serialRead()
{
<span class="hljs-constant" style="box-sizing: border-box;">QByteArray</span> qa = serial.readAll();
<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(qa.at(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)==<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'a'</span>)
ui->textEdit->append(qa);
<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-constant" style="box-sizing: border-box;">QMessageBox::</span>warning (this,tr(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"提示信息"</span>),tr(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"串口接收成功"</span>));
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul><div class="save_code tracking-ad" data-mod="popu_249" style="box-sizing: border-box; position: absolute; height: 60px; right: 30px; top: 5px; color: rgb(255, 255, 255); cursor: pointer; z-index: 2;"><a target=_blank target="_blank" style="color: rgb(106, 57, 6); box-sizing: border-box;"><img src="http://static.blog.csdn.net/images/save_snippets.png" style="border: none; box-sizing: border-box; max-width: 100%;" alt="" /></a></div>
可以用虚拟串口软件和丁丁串口助手调试。
【Qt开发】Qt5.7串口开发的更多相关文章
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...
- Qt5.12.2开发Android环境搭建
Qt-Android开发环境概要qt-opensource-windows-x86-5.12.2----armv7jdk-8u201-windows-x64android-ndk-r18b-windo ...
- 快速阅读《QT5.9 c++开发指南》1
简介:<QT5.9 c++开发指南>的作者是和i三位主要从事地球物理探测仪器设计.数据处理方法研究和软件开发等工作的博士们,这本书以QT Widget为主要内容,比较全面地教授了QT开发桌 ...
- 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容
[Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...
- C# 串口开发
在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形.温度等).用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 - ...
- KL25开发板利用串口蓝牙与PC通信
KL25开发板芯片本身支持三个串口,uart0,uart1,uart2.其中uart0不太一样,在数据手册里面单独一章介绍:而uart1和uart2则是一样的. 我所使用的串口蓝牙模块是BC04,支持 ...
- android 串口开发第二篇:利用jni实现android和串口通信
一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...
- iTOP-4418开发板和6818开发板-第五路串口介绍
iTOP-4418开发板和6818开发板 的除去默认 4 个串口的配置和用法. 4418 的开发板最多支持 5 路串口,如下图所示,4418 的 datasheet. 6818 的开发板最多支持 ...
- JAVA串口开发帮助类分享-及写在马年末
摘要: 在系统集成开发过程中,存在着各式的传输途径,其中串口经常因其安全性高获得了数据安全传输的重用,通过串口传输可以从硬件上保证数据传输的单向性,这是其它介质所不具备的物理条件.下面我就串口java ...
随机推荐
- [Atcoder2292] Division into Two
题目大意 给定n个不同的整数,求将它们分成两个集合X,Y,并且X集合中任意两个数的差>=A,Y集合中任意两个数的差>=B的方案数. 样例输入 5 3 7 1 3 6 9 12 样例输出 5 ...
- Spring、SpringMVC和Springboot的区别
spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc. spring mvc 是只是spring 处理web层请求的一个模 ...
- sql2014 日志太大 删除日志
首先,我们要确认日志的文件名,因为硬盘上的文件名不一定是数据字典里面的文件名,所以要确认下 USE test9572 GO SELECT file_id,name FROM sys.database_ ...
- head first 设计模式笔记5-单例模式
目录: 1.单例模式(Singleton Pattern) 2.概念 3.饿汉式:不是延迟加载,加载类的时候直接初始化 4.懒汉式:延迟加载,首次需要使用的时候在实例化,需要考虑线程安全 5.静态内部 ...
- Linux命令-文本编辑(二)
Linux命令-文本编辑(二) Linux mtype命令 mtype为mtools工具指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容. 语法: mtype [-st][文件] 参 ...
- php的if函数
条件语句用于基于不同条件执行不同的动作 PHP 条件语句 在您编写代码时,经常会希望为不同的决定执行不同的动作.您可以在代码中使用条件语句来实现这一点. 在 PHP 中,我们可以使用以下条件语句: i ...
- Android学习_7/24
一. 活动的生命周期 1. 活动状态 运行:位于返回栈栈顶 暂停:不在栈顶,但仍可见 停止:不在栈顶,完全不可见 销毁:从栈中移除 2. 活动的生存期 ...
- RedisTemplate中zset类型的使用
简述 上一文中简述了使用StringRedisTemplate操作redis中的set类型,今天来记录一下操作zset类型的主要方法 代码 @RunWith(SpringRunner.class) @ ...
- SpringMVC详解一、@RequestMapping注解与Controller接收参数
SpringMVC详解一.@RequestMapping注解与Controller接收参数 https://blog.csdn.net/mxcsdn/article/details/80719258 ...
- TensorFlow常用操作
初始化数据: # -*- coding: utf-8 -*- import tensorflow as tf a = tf.zeros([3, 4], tf.int32) # [[0 0 0 0] # ...