软件编程
位置:首页>> 软件编程>> C语言>> Qt串口通信开发之QSerialPort模块简单使用方法与实例

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

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

标签: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知识请查看下面的相关链接

来源:https://blog.csdn.net/lmhuanying1012/article/details/78747737

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com