1. 程式人生 > >QT下的串列埠通訊例項(原始碼可下載QT5下測試通過)

QT下的串列埠通訊例項(原始碼可下載QT5下測試通過)

在不瞭解QT下的串列埠如何呼叫的時候,我們可以首先到QT的官網上尋找答案,首先,我們可以訪問:以下網址,搜尋serial port qt,可以得到很多相關的線索
http://doc.qt.io/
在這裡插入圖片描述
這個QSerialport類十分豐富,比VC中的使用起來更方便,如下網址,我們可以檢視它的所有成員
http://doc.qt.io/qt-5/qserialport-members.html
在這裡插入圖片描述
相關的一些準備工作,如標頭檔案的包涵,pro檔案的修改,可以參考這裡,我不再贅述:
http://doc.qt.io/qt-5/qtserialport-index.html
在這裡插入圖片描述
假定,我們是要做一個簡單的帶UI的串列埠監控程式,那麼我們首先必須通過列舉的方式,將所有的串列埠物件列出來,放在一個combox裡面。
//列舉所有有效的串列埠,並新增到combox
foreach (const QSerialPortInfo &info ,QSerialPortInfo::availablePorts())
{
ui->PortBox->addItem(info.portName());
}
接下來,我們需要將波特率以及停止位校驗位資料位等列舉數值在對應的combox中列出來,以供選擇。
但這裡,我們需要將列舉轉化為conmbox需要的文字選項,需要進行下面的操作
//列舉所有的波特率
QMetaEnum emBr = QMetaEnum::fromTypeQSerialPort::BaudRate

();
for(int i = 0; i < emBr.keyCount(); i++)
if(emBr.value(i)!=-1)
ui->BaudBox->addItem(QString::asprintf("%d",emBr.value(i)));
同樣的方法,我們可以嗎完成資料位校驗位停止位的combox的填充,這裡不再一一贅述。
設定完串列埠的各個引數即可開始連線串列埠讀寫資料了。

我們這裡準備好讀取資料函式,讀取資料需要考慮顯示的問題,這裡用一個textEdit控制元件來作顯示框。
void MainWindow:: Read_Data()
{

QByteArray buf;
    buf = serial->readAll();
    if(!buf.isEmpty())
    {
        QString str = ui->textEdit->toPlainText();
        str+=tr(buf);
        ui->textEdit->clear();
        ui->textEdit->append(str);
    }
    buf.clear();

}
最後,我們將串列埠讀取觸發與串列埠讀取函式進行訊號與槽的繫結連結即可正常接收資料了。
QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
隨後,我們執行程式就可以看到效果了。測試如下:
在這裡插入圖片描述
原始碼下載地址:
https://download.csdn.net/download/haigear/10782388