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