QT5.5實現串口通信


QT5.1以上版本自帶QtSerialPort集成庫,只要在頭文件中集成

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
這兩個庫,后續只需要調用函數,對串口名,讀寫方式,波特率,驗證方式,數據位數,結束位進行相應設置,便可以連接相應串口進行通信。

部分代碼:
 if(ui->pushButton->text()==tr("打開串口")){
        my_serialport= new QSerialPort();
        my_serialport->setPortName(ui->comboBox->currentText());
        my_serialport->open(QIODevice::ReadWrite);
        my_serialport->setBaudRate(ui->comboBox_2->currentText().toInt());
        switch(ui->comboBox_3->currentIndex()){
        case 0: my_serialport->setParity(QSerialPort::NoParity);break;
        case 1: my_serialport->setParity(QSerialPort::OddParity);break;
        case 2: my_serialport->setParity(QSerialPort::EvenParity);break;
        default: break;
        }
        switch(ui->comboBox_4->currentIndex()){
        case 0: my_serialport->setDataBits(QSerialPort::Data8);break;
        case 1: my_serialport->setDataBits(QSerialPort::Data7);break;
        case 2: my_serialport->setDataBits(QSerialPort::Data6);break;
        default: break;
        }
        switch(ui->comboBox_5->currentIndex()){
        case 0: my_serialport->setStopBits(QSerialPort::OneStop);break;
        case 1: my_serialport->setStopBits(QSerialPort::TwoStop);break;
        default: break;
        }
        my_serialport->setFlowControl(QSerialPort::NoFlowControl);
        connect(my_serialport,SIGNAL(readyRead()),this,SLOT(my_readuart()));
        ui->comboBox->setEnabled(false);
        ui->comboBox_2->setEnabled(false);
        ui->comboBox_3->setEnabled(false);
        ui->comboBox_4->setEnabled(false);
        ui->comboBox_5->setEnabled(false);
        ui->label_6->setStyleSheet("background-color:red");
        ui->pushButton->setText(tr("關閉串口"));
        ui->pushButton_2->setEnabled(true);
    }
    else {
        my_serialport->clear();
        my_serialport->deleteLater();
        //  my_serialport->deleteLater();
        ui->comboBox->setEnabled(true);
        ui->comboBox_2->setEnabled(true);
        ui->comboBox_3->setEnabled(true);
        ui->comboBox_4->setEnabled(true);
        ui->comboBox_5->setEnabled(true);
     //   ui->label_6->setStyleSheet("background-color:none");
        ui->label_6->setStyleSheet("background-color:rgb(130,130,130)");
        ui->pushButton->setText(tr("打開串口"));
        ui->pushButton_2->setEnabled(false);
    }
其中參考於csdn的yh_1988
void serial::on_pushButton_2_clicked()
{
    my_serialport->write(ui->lineEdit->text().toLatin1());
}

值得注意的是,在用於串口通信時,上述函數中只講lineEdit中的text傳遞給串口,但是這樣是缺少換行符/n的。如果是用在有uboot系統上通過串口進行交互時,應該修改為:

void serial::on_pushButton_2_clicked()
{
    my_serialport->write(ui->lineEdit->text().toLatin1());
  my_serialport->write("/n");
}
這樣就可以正常的通信啦。

系統啟動過程打印

輸入?彈出幫助菜單

 

最近用Qt5.9重新編輯了一個Demo,需要下載的同學可以在下面的網址下載

https://github.com/dong930623/Qt/tree/master/SerialPortToolDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM