在Qt中實(shí)現(xiàn)串口通信
本文所將內(nèi)容是在Qt中實(shí)現(xiàn)串口通信,文字描述不多,基本上是代碼實(shí)現(xiàn)。之前本人做過(guò)類似的小程序,不過(guò)那個(gè)是基于線程的。那么接下來(lái)看看本篇文字吧!
首先,加入了“打開串口”,“關(guān)閉串口”“傳送數(shù)據(jù)”三個(gè)按鈕,加入了一個(gè)行編輯框Line Edit。它們的命名如下:
“打開串口”按鈕命名為:openMyComBtn
“關(guān)閉串口”按鈕命名為:closeMyComBtn
“傳送數(shù)據(jù)”按鈕命名為:sendMsgBtn
要傳送數(shù)據(jù)的行編輯框命名為:sendMsgLineEdit
界面如下圖。
第二步,在“打開串口”按鈕上右擊,選擇Go to slot選項(xiàng),然后選擇clicked()選項(xiàng),進(jìn)入它的單擊事件槽函數(shù)中,將上個(gè)程序中在構(gòu)造函數(shù)里寫的語(yǔ)句全部剪切到這里。然后加入幾句按鈕的狀態(tài)設(shè)置語(yǔ)句。如下:
- void MainWindow::on_openMyComBtn_clicked()
- {
- struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};
- //定義一個(gè)結(jié)構(gòu)體,用來(lái)存放串口各個(gè)參數(shù)
- myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);
- //定義串口對(duì)象,并傳遞參數(shù),在構(gòu)造函數(shù)里對(duì)其進(jìn)行初始化
- myCom ->open(QIODevice::ReadWrite);
- //以可讀寫方式打開串口
- connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
- //信號(hào)和槽函數(shù)關(guān)聯(lián),當(dāng)串口緩沖區(qū)有數(shù)據(jù)時(shí),進(jìn)行讀串口操作
- //
- ui->openMyComBtn->setEnabled(false); //打開串口后“打開串口”按鈕不可用
- ui->closeMyComBtn->setEnabled(true); //打開串口后“關(guān)閉串口”按鈕可用
- ui->sendMsgBtn->setEnabled(true); //打開串口后“發(fā)送數(shù)據(jù)”按鈕可用
- }
然后在構(gòu)造函數(shù)里也添加幾句按鈕初始狀態(tài)設(shè)置語(yǔ)句,如下:
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent), ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- ui->closeMyComBtn->setEnabled(false); //開始“關(guān)閉串口”按鈕不可用
- ui->sendMsgBtn->setEnabled(false); //開始“發(fā)送數(shù)據(jù)”按鈕不可用
- }
更改后程序如下圖所示:
這時(shí)運(yùn)行程序,效果如下:
第三步,按上面的方法進(jìn)入“關(guān)閉串口”按鈕和“發(fā)送數(shù)據(jù)”按鈕的單擊事件的槽函數(shù),更改如下。
- void MainWindow::on_closeMyComBtn_clicked() //關(guān)閉串口槽函數(shù)
- {
- myCom->close(); //關(guān)閉串口,該函數(shù)在win_qextserialport.cpp文件中定義
- ui->openMyComBtn->setEnabled(true); //關(guān)閉串口后“打開串口”按鈕可用
- ui->closeMyComBtn->setEnabled(false); //關(guān)閉串口后“關(guān)閉串口”按鈕不可用
- ui->sendMsgBtn->setEnabled(false); //關(guān)閉串口后“發(fā)送數(shù)據(jù)”按鈕不可用
- }
- void MainWindow::on_sendMsgBtn_clicked() //發(fā)送數(shù)據(jù)槽函數(shù)
- {
- myCom->write(ui->sendMsgLineEdit->text().toAscii());
- //以ASCII碼形式將行編輯框中的數(shù)據(jù)寫入串口
- }
最終效果如下:
(將數(shù)據(jù)x發(fā)送給單片機(jī),單片機(jī)返回you send message is : x)
小結(jié):關(guān)于在Qt中實(shí)現(xiàn)串口通信的內(nèi)容就說(shuō)這么多,由于之前做過(guò)類似的小程序,所以比較感興趣,希望你能用到呢這方面的知識(shí)。
【編輯推薦】
解析 QT 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)