qt串口通信开发之qserialport模块简单使用方法与实例-kb88凯时官网登录

时间:2020-05-26
阅读:
免费资源网 - https://freexyz.cn/

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

这里使用了qserialport模块提供的两个类:qserialport类和qserialportinfo类,qserialport类提供了对串口的操作,qserialportinfo类提供了对串口信息的获取。下面是主要代码,包含了对串口类的简单使用。

首先,一定要在.pro文件中添加:qt = serialport

串口初始化如下:

/****************************串口初始化*****************************/ 
void mainwindow::initport() 
{ 
 //读取串口信息 
 foreach (const qserialportinfo &info, qserialportinfo::availableports()) 
 { 
  qdebug()<<"name:"<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://freexyz.cn/
返回顶部
顶部
网站地图