当前位置: 主页 > 程序 >

Qt 串口通信 Demo

时间:2017-07-18  作者:haden   点击:
【摘要】Qt 作为跨平台 C++ 图形用户界面应用程序开发框架,大大减小了应用程序的开发难度,对于异常的考虑也可以省去程序员的时间,特别是对工程应用的程序,在开发快速的同时还保持了

Qt 作为跨平台 C++ 图形用户界面应用程序开发框架,大大减小了应用程序的开发难度,对于异常的考虑也可以省去程序员的时间,特别是对工程应用的程序,在开发快速的同时还保持了健壮性。

作为工程应用,最常见的通信方式就是串口了,Qt 作为跨平台框架,特别是还支持嵌入式系统的UI设计,自然会对串口有较好的支持。

Qt 自带了两个类提供串口通信,分别是 QSerialPort 和 QSerialPortInfo。

使用这两个类之前需要在pro文件中添加:
Qt += serialport

简单使用例程如下:


//QT += serialport
#include < QMainWindow>
#include < QSerialPort>
#include < QSerialPortInfo>
#include < QDebug>

QSerialPort *comPort;       //串口连接指针

/* 串口初始化 */
MainWindow::comInit()
{
  //串口类初始化
  comPort = new QSerialPort("COM3");
  //打开串口
  if(comPort->open(QIODevice::ReadWrite))
  {

    comPort->setBaudRate(QSerialPort::Baud9600);        //设置波特率9600
    comPort->setStopBits(QSerialPort::OneStop);         //1位停止位
    comPort->setParity(QSerialPort::NoParity);          //无奇偶校验
    comPort->setDataBits(QSerialPort::Data8);           //8位数据位
    comPort->setFlowControl(QSerialPort::NoFlowControl);        //没有流控

    comPort->clearError();      //清空错误信息
    comPort->clear();           //清空接收信息
    connect(comPort,SIGNAL(readyRead()),this,SLOT(com_readData()));

  }
  else
  {
    //打开串口失败
    qDebug() << "COM Open failed" << endl;
    delete comPort;
  }
}

/* 串口读取数据 */
MainWindow::com_readData()
{
  QByteArray arr = comPort->readAll();
  unsigned char *data = (unsigned char *)arr.data();

  qDebug() << "Recive Data:" << data << endl;
}

/* 串口发送数据 */
MainWindow::com_writeData()
{
  //清除错误信息
  comPort->clearError();
  //发送数据
  comPort->write("hello");

  //检查发送状态
  if(comPort->error() != QSerialPort::NoError)
      qDebug() << "Send Data Error!" << endl;
  else
      qDebug() << "Send Data Success!" << endl;
  comPort->clearError();
}

                

如果学过51单片机,入学教程中附赠的串口调试助手有个 Bug 就是在软件中打开串口的情况下拔掉串口线程序会报错并无响应。Qt 官方提供的类很好的解决了这个错误问题,并且提供了多种错误信息,为程序编写提供了便利。

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片

推荐内容