QT5入门之23 -QT串口编程

 

QT5有专门的串口类: 
QSerialPort:提供访问串口的功能 
QSerialPortInfo:提供系统中存在的串口的信息 
具体使用方法: 
1.在pro文件中加入: QT += serialport

2.mainwindow.h中添加头文件及成员:

#include <QSerialPort>
#include <QSerialPortInfo>
  • 1
  • 2
public:
QSerialPort serial;//串口实例
void initSerialPort();//初始化串口函数
private slots://必须加slots
void serialRead();
  • 1
  • 2
  • 3
  • 4
  • 5

3.在主窗口添加一个comboBox,一个label,初始化串口

void MainWindow::initSerialPort()
{
connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead())); //连接槽 //获取计算机上所有串口并添加到comboBox中
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
if(infos.isEmpty())
{
ui->comboBox->addItem("无串口");
return;
}
foreach (QSerialPortInfo info, infos) {
ui->comboBox->addItem(info.portName());
qDebug() << info.portName();
}
}

3.comboBox选择改变事件函数:

void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
QSerialPortInfo info;
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
int i = 0;
foreach (info, infos) {
if(info.portName() == arg1) break;
i++;
}
if(i != infos.size ()){//can find
ui->lblStatus->setText("串口打开成功");
serial.close();
serial.setPort(info);
serial.open(QIODevice::ReadWrite); //读写打开
// serial.setBaudRate(QSerialPort::Baud9600); //波特率
// serial.setDataBits(QSerialPort::Data8); //数据位
// serial.setParity(QSerialPort::NoParity); //无奇偶校验
// serial.setStopBits(QSerialPort::OneStop); //无停止位
// serial.setFlowControl(QSerialPort::NoFlowControl); //无控制
}else{
serial.close();
ui->lblStatus->setText("串口打开失败");
}
}

4.串口发送

void MainWindow::on_btnSend_clicked()
{
// QByteArray arr = "abcd";
// serial.write(arr);
char dat[] = {0x55,0x01,0x05,0x00,0xAA};
serial.write(dat,5);
}

5.串口接收,需添加一个textEdit。

void MainWindow::serialRead()
{
QByteArray qa = serial.readAll();
// if(qa.at(0)=='a')
ui->textEdit->append(qa);
// str.sprintf("%02x ",(int)qa[i]);//十六进制显示
// QMessageBox::warning (this,tr("提示信息"),tr("串口接收成功"));
}

可以用虚拟串口软件和丁丁串口助手调试。 

最新文章

  1. C++标准库简介、与STL的关系。
  2. [开源框架推荐]Icepdf:纯java的pdf文档的提取和转换库
  3. js 异步请求封装
  4. openstack-dbs
  5. hibernate的第一个程序
  6. codevs 1743 反转卡片
  7. wcf中netTcpBinding的元素构成
  8. Bzoj 3747: [POI2015]Kinoman 线段树
  9. iOS开发总结-UIWebView 集成 浏览器
  10. android4.0默认界面旋转180
  11. QUdpSocket Class
  12. 201521123049 《JAVA程序设计》 第11周学习总结
  13. PHPMailer发送邮件中文附件名是乱码
  14. Java基础之流程控制
  15. .NET MVC后台发送post请求
  16. pip命令无法使用
  17. 转载 javascript中(function($){...})(jQuery)写法是什么意思
  18. QT开发环境安装配置教程
  19. sudo配置教程
  20. YaoLingJump开发者日志(七)

热门文章

  1. Oracle-数据泵使用
  2. Centos7下编译CDH版本hadoop源码支持Snappy压缩
  3. E - 着色方案 HYSBZ - 1079 (计数DP)
  4. WPF复制异常问题(OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)))
  5. python f-string
  6. ActiveMQ 入门Nodejs版
  7. opencv学习笔记(九)Mat 访问图像像素的值
  8. 带你玩转Visual Studio——带你理解微软的预编译头技术
  9. vue系列之vue-resource
  10. python 全栈开发,Day18(对象之间的交互,类命名空间与对象,实例的命名空间,类的组合用法)