Qt串口通信开发之QSerialPort模块简单使用方法与实例
作者:亭台六七座 时间:2023-03-23 03:25:45
我这里主要是对串口类的简单使用,实现的功能是以读写方式打开串口,点击发送数据按钮将发送区的数据发送到缓冲区,然后在接收区显示出来,界面如下:(源码可以在这里下载)
这里使用了QSerialPort模块提供的两个类:QSerialPort类和QSerialPortInfo类,QSerialPort类提供了对串口的操作,QSerialPortInfo类提供了对串口信息的获取。下面是主要代码,包含了对串口类的简单使用。
首先,一定要在.pro文件中添加:QT += serialport
串口初始化如下:
/****************************串口初始化*****************************/
void MainWindow::initPort()
{
//读取串口信息
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug()<<"Name:"<<info.portName();
qDebug()<<"Description:"<<info.description();
qDebug()<<"Manufacturer:"<<info.manufacturer();
//这里相当于自动识别串口号之后添加到了cmb,如果要手动选择可以用下面列表的方式添加进去
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
//将串口号添加到cmb
ui->cmbPortName->addItem(info.portName());
//关闭串口等待人为(打开串口按钮)打开
serial.close();
}
}
QStringList baudList;//波特率
QStringList parityList;//校验位
QStringList dataBitsList;//数据位
QStringList stopBitsList;//停止位
baudList<<"50"<<"75"<<"100"<<"134"<<"150"<<"200"<<"300"
<<"600"<<"1200"<<"1800"<<"2400"<<"4800"<<"9600"
<<"14400"<<"19200"<<"38400"<<"56000"<<"57600"
<<"76800"<<"115200"<<"128000"<<"256000";
ui->cmbBaudRate->addItems(baudList);
ui->cmbBaudRate->setCurrentIndex(12);
parityList<<"无"<<"奇"<<"偶";
parityList<<"标志";
parityList<<"空格";
ui->cmbParity->addItems(parityList);
ui->cmbParity->setCurrentIndex(0);
dataBitsList<<"5"<<"6"<<"7"<<"8";
ui->cmbDataBits->addItems(dataBitsList);
ui->cmbDataBits->setCurrentIndex(3);
stopBitsList<<"1";
stopBitsList<<"1.5";
stopBitsList<<"2";
ui->cmbStopBits->addItems(stopBitsList);
ui->cmbStopBits->setCurrentIndex(0);
//设置按钮可以被按下
ui->btnOpen->setCheckable(true);
}
这里通过遍历所有串口将我们需要使用的串口添加到了combox中,如果想要手动选择可以将串口名称通过列表的方式添加到combox中,到使用的时候再选择。
串口设置如下:
/****************************串口设置******************************/
void MainWindow::on_btnOpen_clicked()
{
if(ui->btnOpen->text() == "打开串口")
{
my_serialport = new QSerialPort(this);
//设置串口号
my_serialport->setPortName(ui->cmbPortName->currentText());
//以读写方式打开串口
if(my_serialport->open(QIODevice::ReadWrite))
{
//设置波特率
my_serialport->setBaudRate(ui->cmbBaudRate->currentText().toInt());
//设置数据位
my_serialport->setDataBits(QSerialPort::Data8);
//设置校验位
my_serialport->setParity(QSerialPort::NoParity);
//设置流控制
my_serialport->setFlowControl(QSerialPort::NoFlowControl);
//设置停止位
my_serialport->setStopBits(QSerialPort::OneStop);
//每秒读一次
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(readComDataSlot()));
timer->start(1000);
setNonSelectable();
}
else
{
QMessageBox::about(NULL, "提示", "串口没有打开!");
return;
}
}
else
{
timer->stop();
setSelectable();
my_serialport->close();
}
}
这里是对串口的设置,需要先打开串口才能设置串口参数。参数设置好之后就可以通过read()和write()函数进行数据的读写,我这里用的是1秒的定时器来读缓冲区的数据。
数据收发如下:
/****************************数据传输******************************/
void MainWindow::readComDataSlot()
{
//读取串口数据
QByteArray readComData = my_serialport->readAll();
//将读到的数据显示到数据接收区的te中
if(readComData != NULL)
{
ui->teReceiveData->append(readComData);
}
//清除缓冲区
readComData.clear();
}
void MainWindow::on_btnSend_clicked()
{
//获取发送区的数据
QString sendData = ui->teSendData->toPlainText();
QByteArray sendData_2 = sendData.toLatin1();
//写入缓冲区
my_serialport->write(sendData_2);
}
本文简单介绍了下Qt串口通信模块QSerialPort简单使用方法与实例,更详细的Qt串口通信模块QSerialPort知识请查看下面的相关链接
来源:https://blog.csdn.net/lmhuanying1012/article/details/78747737
标签:Qt,串口,QSerialPort
0
投稿
猜你喜欢
C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例
2021-07-09 03:22:59
SpringBoot 监控管理模块actuator没有权限的问题解决方法
2022-01-26 21:50:11
关于国际化、OGNL表达式语言
2023-09-04 15:20:45
springmvc 分页查询的简单实现示例代码
2022-01-09 11:08:22
JavaEE中用response向客户端输出中文数据乱码问题分析
2022-07-14 00:39:27
Java系统的高并发解决方法详解
2021-08-23 08:39:50
Android仿微信朋友圈点击加号添加图片功能
2022-11-28 12:44:45
90分钟实现一门编程语言(极简解释器教程)
2022-01-15 05:11:56
spring boot结合Redis实现工具类的方法示例
2023-05-12 09:47:46
SpringBoot实现MapperScan添加动态配置(占位符)
2023-11-26 05:08:06
C#实现鼠标移动到曲线图上显示值的方法
2023-06-01 00:56:06
浅谈Android Studio 4.1 更新内容
2021-09-17 11:27:30
java后端解决跨域的几种问题解决
2022-01-05 06:34:24
C#绘制中国象棋棋盘
2021-05-27 15:08:44
C/C++ Crypto密码库调用的实现方法
2021-10-25 23:59:24
Spring Security认证机制源码层探究
2022-07-27 19:05:26
java运行windows的cmd命令简单代码
2021-06-12 11:50:47
Java监听器ActionListener与MouseListener的执行顺序说明
2022-02-04 20:08:23
关于Java虚拟机HotSpot
2022-10-28 18:36:01
详解如何利用C#实现设置系统时间
2023-09-04 13:55:05