QT5入门之23 -QT串口编程(转)

QT5入门之23 -QT串口编程

QT5有专门的串口类: 
QSerialPort:提供访问串口的功能 
QSerialPortInfo:提供系统中存在的串口的信息 
具体使用方法: 
1.在pro文件中加入: QT += serialport

2.mainwindow.h中添加头文件及成员:

#include <QSerialPort>
#include <QSerialPortInfo>
  • 1
  • 2
public:
 QSerialPort serial;//串口实例
 void initSerialPort();//初始化串口函数
private slots://必须加slots
    void serialRead(); 
  • 1
  • 2
  • 3
  • 4
  • 5

3.在主窗口添加一个comboBox,一个label,初始化串口

void MainWindow::initSerialPort()
{
    connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead()));   //连接槽

    //获取计算机上所有串口并添加到comboBox中
    QList<QSerialPortInfo>  infos = QSerialPortInfo::availablePorts();
    if(infos.isEmpty())
    {
        ui->comboBox->addItem("无串口");
        return;
    }
    foreach (QSerialPortInfo info, infos) {
        ui->comboBox->addItem(info.portName());
        qDebug() << info.portName();
    }
}

3.comboBox选择改变事件函数:

void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
    QSerialPortInfo info;
    QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
    int i = 0;
    foreach (info, infos) {
        if(info.portName() == arg1) break;
        i++;
    }
    if(i != infos.size ()){//can find
        ui->lblStatus->setText("串口打开成功");
        serial.close();
        serial.setPort(info);
        serial.open(QIODevice::ReadWrite);          //读写打开
//      serial.setBaudRate(QSerialPort::Baud9600);  //波特率
//      serial.setDataBits(QSerialPort::Data8);     //数据位
//      serial.setParity(QSerialPort::NoParity);    //无奇偶校验
//      serial.setStopBits(QSerialPort::OneStop);   //无停止位
//      serial.setFlowControl(QSerialPort::NoFlowControl);  //无控制
    }else{
        serial.close();
        ui->lblStatus->setText("串口打开失败");
    }
}

 

4.串口发送

void MainWindow::on_btnSend_clicked()
{
 //   QByteArray arr = "abcd";
 //   serial.write(arr);
    char dat[] = {0x55,0x01,0x05,0x00,0xAA};
    serial.write(dat,5);
}

5.串口接收,需添加一个textEdit。

void MainWindow::serialRead()
{
    QByteArray qa = serial.readAll();
  //  if(qa.at(0)=='a')
    ui->textEdit->append(qa);  
    //  str.sprintf("%02x ",(int)qa[i]);//十六进制显示
  //  QMessageBox::warning (this,tr("提示信息"),tr("串口接收成功"));
}

可以用虚拟串口软件和丁丁串口助手调试。 
这里写图片描述

posted @ 2019-03-14 19:29  中国人醒来了  阅读(1207)  评论(0编辑  收藏  举报