当前位置: 首页 > 编程笔记 >

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

拓拔欣嘉
2023-03-14
本文向大家介绍Qt串口通信开发之QSerialPort模块简单使用方法与实例,包括了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知识请查看下面的相关链接

 类似资料:
  • 本文向大家介绍Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法,包括了Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法的使用技巧和注意事项,需要的朋友参考一下 在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况。 因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读

  • 本文向大家介绍java 串口通信详细及简单实例,包括了java 串口通信详细及简单实例的使用技巧和注意事项,需要的朋友参考一下 java 实现串口通信 最近做了一个与硬件相关的项目,刚开始听说用java和硬件打交道,着实下了一大跳。java也可以操作硬件? 后来接触到是用java通过串口通信控制硬件感觉使用起来还不错,也很方便。 特拿出来和大家一起分享一下。 准备工作: 首先到SUN官网下载一个z

  • 本文向大家介绍Qt GUI图形图像开发之Qt表格控件QTableView简单使用方法及QTableView与QTableWidget区别,包括了Qt GUI图形图像开发之Qt表格控件QTableView简单使用方法及QTableView与QTableWidget区别的使用技巧和注意事项,需要的朋友参考一下 QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件 QTableView

  • 本文向大家介绍C#串口通信实现方法,包括了C#串口通信实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#串口通信实现方法。分享给大家供大家参考。具体方法如下: 通过COM1发送数据,COM2接收数据。当COM2接收完本次发送的数据后,向COM1发送信息通知COM1本次数据已发完,COM1接到通知后,再发下一段数据。这样可以确保每次发送的数据都可以被正确接收。 代码如下: 辅助代码

  • 本文向大家介绍Android串口通信之串口读写实例,包括了Android串口通信之串口读写实例的使用技巧和注意事项,需要的朋友参考一下 在Android串口通信:基本知识梳理的基础上,我结合我项目中使用串口的实例,进行总结; Android使用jni直接进行串口设备的读写网上已经有开源项目了,本文是基于网上的开源项目在实际项目中的使用做的调整和优化; Google串口开源项目 下面是我项目中的相关

  • 本文向大家介绍Python psutil模块简单使用实例,包括了Python psutil模块简单使用实例的使用技巧和注意事项,需要的朋友参考一下 安装很简单 官网地址为: https://pythonhosted.org/psutil/ (文档上有详细的api) github地址为: https://github.com/giampaolo/psutil/ psutil比较好的地方,一个是跨平台