QT5基於qt第三方庫的使用

簡述

緊接上一次關於Qt5自帶的串口庫的使用,本次我分享一下Qt的第三方串口庫的使用以及一些注意事項。

第三方庫的獲取

關於第三方串口庫的獲取可以點擊此處下載源碼.
解壓後的源碼文件如下圖:
第三方串口庫

文件調用

本次我使用的是windows平臺,故而在項目目錄下添加win_qextserialport.cpp/hqextserialbase.cpp/hqextserialport.cpp/h6個文件,如果是在Linux平臺下則在相應的項目源碼路徑下添加posix_qextserialport.cpp/h,區別於windows下的win_qextserialport.cpp/h,其他四個文件相應添加到項目目錄下。在編譯器裏導入工程中,如下圖所示:
工程結構
//Mainwindow.h

#define MAINWINDOW_H
#include "win_qextserialport.h"
#include <QMainWindow>
#include <QEvent>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
   explicit MainWindow(QWidget *parent = 0);
    myPortInit(void);           //串口設置函數
    ~MainWindow();

private slots:
    void readMyCom();           //自定義槽函數,用於讀取接收到的數據
    void write();               //自定義槽函數,用於發送
private:
    Ui::MainWindow *ui;
    Win_QextSerialPort *myCom;  //定義一個串口對象
};

#endif // MAINWINDOW_H

關鍵函數實現

void MainWindow::myPortInit(void)
{
    //串口號大於10的串口需要使用串口名“\\\\.\\COM11”,否則無法操作串口
   myCom = new Win_QextSerialPort("\\\\.\\COM11", QextSerialBase::EventDriven);
   //此處須留意,必須先打開串口再設置串口的參數,否則設置的參數無效
   if (myCom->open(QIODevice::ReadWrite)){

       myCom->setBaudRate(BAUD115200);
       myCom->setDataBits( DATA_8);
       myCom->setParity(PAR_NONE);
       myCom->setStopBits(STOP_1);
       myCom->setFlowControl(FLOW_OFF);
       myCom->setTimeout(200);
   }
}
//串口發送函數
void MainWindow::write(void)
{
    QString temp = ui->sendLine->text();
//    const char  *data;
//    qint64 len;
    QByteArray ba = temp.toLatin1();         //toASCII()適用在qt4
//    data = ba.data();
    myCom->write(ba);       //直接以字節數組發送
    ui->sendLine->clear();
    qDebug()<< temp;
}

//串口讀取函數
void MainWindow::readMyCom(void)
{
    QByteArray temp = myCom->readAll();
    ui->textBrowser->insertPlainText(temp);//display datas
}

注意事項

由於該庫最初是爲了解決在qt4下的串口操作問題,所以直接用在qt5下可能會報一些錯誤如關於 toAscii() and fromAscii()的錯誤解決方法是用下面的來代替 :
toLatin1()
fromLatin1()

總結

本文只是簡單介紹了第三方庫的基本使用,如有錯誤,歡迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章