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

(0)

相关推荐

  • Qt串口通信开发之Qt串口通信模块QSerialPort开发完整实例(串口助手开发)

    之前自己写了用于上位机做基本收发的界面,独立出来相当于一个串口助手,先贴图: 功能作为串口助手来说还算完善,五个发送槽,一个接收槽,可以检测可用串口并加上相关标志,串口设置,记数功能,还有菜单栏上的文件操作和一些选择功能. 下面说一说这个项目: 做这个串口助手分为两步,第一步是设计界面,第二部是功能的代码实现. 一.界面设计 界面设计用Qt Designer,当然用Qt Creator的界面编辑器也可以,只不过感觉Qt Designer更好用一点,因为可以随时运行查看你的界面效果而不用编译整个项

  • Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例

    首先要了解QChartView.QChart.QLineSeries.QValueAxis的实体之间的关系,例如一个QChartView中可以包含几个QValueAxis?这些可参考 Qt图形图像开发曲线图表模块QChart库基本用法.各个类之间的关系说明 每个chart可以包含多个QLineSeries数据系列,每个QLineSeries数据系列又包含了2个QValueAxis数值轴或QDateTimeAxis时间轴. 那么这个chart中的多个数据系列,一起显示在同一个chart中,会是什么

  • Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例

    1.使用QChartView来缩放 (1)用鼠标框选一个矩形,把图放大到这个矩形 QChartView::setRubberBand(QChartView::RectangleRubberBand);//XY方向同时放大到鼠标画出的矩形大小(也可以设置为只放大X轴或Y轴) (2)setRubberBand函数同时也能使鼠标右键,具备缩小图的功能. 2.使用Qchart来平移和缩放 QChart::scroll(-10, 5);//整体平移(-10, 5),两个参数分别为Δx和Δy QChart:

  • Qt图形图像开发之曲线图表库QtChart编译安装详细方法与使用实例

    Qt曲线图表库QtChart简介 Qt的线性绘图控件有大名鼎鼎的Qwt,ChartDirector,小巧玲珑的QCustomPlot,当然还有自家的QtChart.长久以来QtChart在Qt家族里一直是收费的模块,只有商业版才可以使用,但Qt5.7之后将开放其权限,可参见:Qt 5.7 亮瞎眼的更新.下面将介绍如何安装QtChart并进行简单的绘图. Qt曲线图表库QtChart下载 这里用git下载QtChart,参考Qt Charts 5.7.0 安装教程 Git地址:https://gi

  • Qt图形图像开发之曲线图表模块QChart库坐标轴和数据不对应、密集的散点图无法显示问题解决方法

    QChart坐标轴和数据不对应问题描述: lineseries->append(4, 10); lineseries->append(5, 8); Chart->addSeries(lineseries); // 将 series 添加至图表中 axisX->setRange(0, 15);//设置X的显示范围 axisY->setRange(-20, 20); lineChart->setAxisX(axisX);//把轴添加到图表中 lineChart->se

  • Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况. 因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分. 因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据. 本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快. 发送 void Widg

  • Qt串口通信开发之QSerialPort模块详细使用方法与实例

    Qt串口通信基础及名词说明 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.它很简单并且能够实现远距离通信.比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米: 而对于串口而言,长度可达1200米.典型地,串口用于ASCII码字符的传输.通信使用3根线完成,分别是地线.发送.接收.由于串口通信

  • Qt图形图像开发之QT滚动区控件(滚动条)QScrollArea的详细方法用法图解与实例

    QT滚动区控件(滚动条控件)QScrollArea简介 滚动区域控件QScrollArea用于显示一个画面中的子部件的内容.如果部件超过画面的大小,视图可以提供滚动条,这样就可以看到部件的整个区域. QScrollArea属于控件容器类,可以直接在ui中拖出来. 对于QScrollArea,最难搞懂的就是:如何控制它,才能让它在我们想要出现滚动条的时候出现滚动条. 我们拖入一个QScrollArea,再向他里面拖入4个button,观察信息如下: 可以发现,4个button并不是直接位于QScr

  • Qt图形图像开发曲线图表模块QChart库基本用法、各个类之间的关系说明

    如何编译安装QChart请查看下面文章 Qt图形图像开发之曲线图表库QtChart编译安装详细方法与使用实例 使用Qt曲线图表模块Chart库首先要注意3点: (1)在.pro文件中添加:QT += charts. (2)用到QChart的文件中添加:QT_CHARTS_USE_NAMESPACE,或者:using namespace QtCharts; 在ui界面中拖入一个graphicsView控件,然后右击提升为QChartView类,写提升为的类:QtCharts::QChartView

  • Qt图形图像开发之曲线图表模块QChart库读取/设置X轴的显示区间

    设置初始的显示的区间,常用的有两种方法 (1)自动 lineseries = new QLineSeries();//声明折线数据集 lineseries->append(4, 10); //填充数据集 *lineseries << QPointF(13, 5) << QPointF(17, 6); lineChart = new QChart();//创建图表 lineChart->addSeries(lineseries); // 将 数据集 添加至图表中 line

  • Qt图形图像开发之高性能曲线图模块QCustomplot库详细使用方法与实例(支持动、静曲线图)

    Qt曲线图模块QCustomPlot库介绍 QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线.动态曲线.多重坐标曲线,柱状图,蜡烛图等 前段时间用QChart模块画图,一条曲线上面放8000条数据就会卡的不行必须要换个其他的控件,后来找到了曲线图模块QCustomplot库 这个库性能非常好,画曲线图折线图柱状图动态静态,放大缩小,都很好用,10w条数据量无压力秒画出来一点也不卡 下载地址 https://www.qcustomplot.com/index.php/downloa

  • Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解

    Qt曲线图模块QCustomPlot库介绍 QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线.动态曲线.多重坐标曲线,柱状图,蜡烛图等.只需要在项目中加入头文件qcustomplot.h和qcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用. QCustomPlot官网:   http://www.qcustomplot.com/ QCustomPlot下载地址:   http://www.qcustomplot.com/index.

随机推荐