Qt串口通信开发之QSerialPort模块简单使用方法与实例

作者:亭台六七座 时间:2023-03-23 03:25:45 

我这里主要是对串口类的简单使用,实现的功能是以读写方式打开串口,点击发送数据按钮将发送区的数据发送到缓冲区,然后在接收区显示出来,界面如下:(源码可以在这里下载)

Qt串口通信开发之QSerialPort模块简单使用方法与实例

这里使用了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
  • asp之家 软件编程 m.aspxhome.com