簡述
緊接上一次關於Qt5自帶的串口庫的使用,本次我分享一下Qt的第三方串口庫的使用以及一些注意事項。
第三方庫的獲取
關於第三方串口庫的獲取可以點擊此處下載源碼.
解壓後的源碼文件如下圖:
文件調用
本次我使用的是windows平臺,故而在項目目錄下添加win_qextserialport.cpp/h
、qextserialbase.cpp/h
和qextserialport.cpp/h
6個文件,如果是在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()
總結
本文只是簡單介紹了第三方庫的基本使用,如有錯誤,歡迎指正。