zoukankan      html  css  js  c++  java
  • 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("串口接收成功"));
    }

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

  • 相关阅读:
    BZOJ1299 [LLH邀请赛]巧克力棒
    BZOJ1046 [HAOI2007]上升序列
    BZOJ1798 [Ahoi2009]Seq 维护序列seq
    BZOJ2045 双亲数
    BZOJ2301 [HAOI2011]Problem b
    BZOJ1021 [SHOI2008]Debt 循环的债务
    BZOJ2618 [Cqoi2006]凸多边形
    BZOJ1069 [SCOI2007]最大土地面积
    BZOJ1051 [HAOI2006]受欢迎的牛
    2017年09月23日普级组 环
  • 原文地址:https://www.cnblogs.com/it-tsz/p/10532898.html
Copyright © 2011-2022 走看看