Qt 新手實戰專案之手把手打造一個串列埠助手
阿新 • • 發佈:2021-07-06
一前景
很多時候我們在學習一門新的語言,一直在學習各種語法和記住各種關鍵字,很容易產生枯燥的情緒,感覺學習這些玩意兒不知道用在什麼地方,心裡很是苦惱,這不,我在這記錄下我學習Qt的第一個的小專案-串列埠通訊助手吧,邊做專案邊學習比單獨看知識點可有趣多啦。話不多說,我們就現在開始吧!
二準備工作
我這邊使用的Qt版本為5.12.8,然後開啟qt creator。
1,新建專案,選擇Qt Widgets Application
2,填寫名稱和建立路徑
3.之後一直預設點下一步。
4.完成後專案是以下這樣的,我的專案名稱為:MySerialport
這樣我們的準備工作就完成了!
三編寫程式碼
1,我們雙擊開啟:MySerialport.pro 檔案
在這新增 Qt += serialport,然後點選ctrl+s儲存
執行qmake一下,重新構建
2,新增標頭檔案
3.好了,準備工作已經做好了,接下來我們先設計ui介面
接下來出現ui設計介面
設計完成後
現在開始到了關鍵的時候,我們開始寫程式碼
這是標頭檔案:mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QSerialPort> #include <QSerialPortInfo> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: void _Init(); private: void _onOpen(); void _onClose(); void _onSendData(); void _onSerialDatas(); private: Ui::MainWindow *ui; QSerialPort *_serial; }; #endif // MAINWINDOW_H
這是原始檔
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) , _serial(nullptr) { ui->setupUi(this); _Init(); } MainWindow::~MainWindow() { delete ui; _onClose(); } /*初始化一些必要環境*/ void MainWindow::_Init() { connect(ui->toolButton_open, &QToolButton::clicked, this, &MainWindow::_onOpen); connect(ui->toolButton_close, &QToolButton::clicked, this, &MainWindow::_onClose); connect(ui->toolButton_send, &QToolButton::clicked, this, &MainWindow::_onSendData); } /*開啟串列埠*/ void MainWindow::_onOpen() { _serial = new QSerialPort(); /*選擇資訊*/ const QString portname = ui->comboBox_com->currentText(); const QString baudRate = ui->comboBox_baudrate->currentText(); const QString data = ui->comboBox_data->currentText(); const QString stop = ui->comboBox_stop->currentText(); const QString polarity = ui->comboBox_polarity->currentText(); /*設定串列埠名*/ _serial->setPortName(portname); /*波特率*/ if(baudRate == "9600"){ _serial->setBaudRate(QSerialPort::Baud9600); } else if(baudRate == "38400"){ _serial->setBaudRate(QSerialPort::Baud38400); } /*資料位*/ if(data == "5"){ _serial->setDataBits(QSerialPort::Data5); } else if(data == "6"){ _serial->setDataBits(QSerialPort::Data6); } else if(data == "7"){ _serial->setDataBits(QSerialPort::Data7); } else if(data == "8"){ _serial->setDataBits(QSerialPort::Data8); } /*停止位*/ if(stop == "1"){ _serial->setStopBits(QSerialPort::OneStop); } else if(stop == "1.5"){ _serial->setStopBits(QSerialPort::OneAndHalfStop); } else if(stop == "2"){ _serial->setStopBits(QSerialPort::OneStop); } /*校驗位*/ if(polarity == "無"){ _serial->setParity(QSerialPort::NoParity); } else if(polarity == "奇校驗"){ _serial->setParity(QSerialPort::EvenParity); } else if(polarity == "偶校驗"){ _serial->setParity(QSerialPort::OddParity); } /*開始開啟串列埠*/ if(!_serial->open(QIODevice::ReadWrite)){ QMessageBox::warning(this, "警告", "串列埠開啟失敗!"); return; } ui->toolButton_open->setEnabled(false); connect(_serial, &QSerialPort::readyRead, this, &MainWindow::_onSerialDatas); } /*關閉串列埠*/ void MainWindow::_onClose() { if(_serial != nullptr){ _serial->close(); delete _serial; _serial = nullptr; ui->toolButton_open->setEnabled(true); } } /*傳送串列埠資料*/ void MainWindow::_onSendData() { if(_serial != nullptr){ QByteArray datas = ui->lineEdit_send->text().toLocal8Bit(); _serial->write(datas); _serial->waitForBytesWritten(3000); } } /*接收串列埠資料*/ void MainWindow::_onSerialDatas() { QString datas = _serial->readAll(); ui->textEdit_rece->append(datas.toLatin1()); }
編譯執行一下,我們的程式碼串列埠助手已經編寫完成了,接下來就是測試一下我們編寫的是否正確!
三測試
執行我們剛剛寫好的串列埠助手,接下來,再開啟另外一個已經測試好的串列埠通訊助手,如果它們兩個串列埠通訊助手都能傳送和接收資料,說明我們編寫的串列埠通訊助手是沒有問題的。
1.先測試傳送功能
由上圖看,我們剛編寫的串列埠通訊助手傳送功能沒有問題!
2.再測試接收功能
由上圖看,我們剛編寫的串列埠通訊助手接收功能沒有問題!
四結束
以上就是記錄學習Qt過程中,第一次做一個小小專案的體驗,雖然看上去沒多大功能,但當時還是很有成就感的!
學無止境,好好努力,致自己,致未來!