利用QT制作串口助手
生活随笔
收集整理的這篇文章主要介紹了
利用QT制作串口助手
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言:
? ? ? 在嵌入式系統中,諸多設備都可以通過串口來控制,比如WiFi、藍牙、RFID等等,因此在嵌入式設備中使用串口就顯得特別重要。在QT5中又自帶了串口通信模塊,所以用QT來制作串口助手相比較簡單些。
一、工程文件的修改
在項目的.pro文件中加入一句?QT?+=?serialport,如下圖
一、界面設計
?如下圖所示,天氣窗口界面由圖中①、②、③三部分。其中:
(1)第①部分是串口信息的配置,打開/關閉串口按鈕,。
(2)第②部分是信息接收區,由一個QTextBrowser框和一個QPushButton按鈕組成
(3)第③部分是信息發送區,由一個QTextEdit輸入框和3個QPushButton按鈕以及QCheckBox復選框組成
?
三、實現步驟
? ? ?1、找到串口設備文件
? ? ?3、配置串口設備(波特率 、數據位 8b、停止位 1b 和校驗,無硬件流控模式)
? ? ?2、打開串口設備
? ? ?4、發送數據, 接收數據
? ? ?5、關閉串口設備
四、具體實現
1、通過QSerialPortInfo查詢所有串口設備
//掃描串口 void ComWin::on_scanBt_clicked() {ui->comboBox->clear();//獲取當前設備上的所有串口QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();foreach (QSerialPortInfo info, infos){ui->comboBox->addItem( info.portName() );} }2、創建串口對象 ?QSerialPort
QSerialPort mserial;3、配置串口信息(波特率 、數據位 、停止位 和校驗)
//配置串口屬性 void ComWin::setSerial() {//配置串口屬性mserial.setBaudRate(ui->baudBox->currentText().toInt());//波特率switch (ui->dataBox->currentText().toInt()) { //數據位case 5: mserial.setDataBits(QSerialPort::Data5);break; //5位case 6: mserial.setDataBits(QSerialPort::Data6);break; //6位case 7: mserial.setDataBits(QSerialPort::Data7);break; //7位case 8: mserial.setDataBits(QSerialPort::Data8);break; //8位}switch (ui->stopBox->currentText().toInt()) { //停止位case 1: mserial.setStopBits(QSerialPort::OneStop);break; //1位case 2: mserial.setStopBits(QSerialPort::TwoStop);break; //2位}if(ui->checkBox->currentText() == "NONE"){mserial.setParity(QSerialPort::NoParity);//無校驗}else if(ui->checkBox->currentText() == "ODD"){mserial.setParity(QSerialPort::OddParity);//奇校驗}else if(ui->checkBox->currentText() == "EVEN"){mserial.setParity(QSerialPort::EvenParity);//偶校驗} }4、調用對象方法打開/關閉串口-----open/close
這里有一個標記falg判斷現在按下該按鈕是打開還是關閉串口,falg初始值為0,當按鈕每按下時,標記falg就加一,所以判斷falg是否能被2整除,來判斷當前按下是做啥操作
//打開/關閉串口 void ComWin::on_openBt_clicked() {if(falg%2 == 0){setSerial();mserial.setPortName(ui->comboBox->currentText());//打開串口if(!mserial.open(QIODevice::ReadWrite)){qDebug()<<"open fail";}ui->openBt->setText("關閉");ui->openBt->setStyleSheet("background-color: rgb(0, 255, 0);");ui->label_6->setStyleSheet("border-image: url(:/open.png);");}else {//關閉串口mserial.close();ui->openBt->setText("打開");ui->openBt->setStyleSheet("background-color: rgb(255, 0, 0);");ui->label_6->setStyleSheet("border-image: url(:/close.png);");}falg++;}5、往串口發送數據---write
這里通過write函數發送信息,并且當復選按鈕(自動換行)選上的話,line為2,所以發出去的信息會加一個"\n"。
//發送數據 void ComWin::on_sendBt_clicked() {msg = ui->textEdit->toPlainText();if(this->line!=0) this->msg+="\n";//發送數據mserial.write(msg.toUtf8()); } //是否自動換行 void ComWin::on_newlineBox_stateChanged(int arg1) {this->line = arg1;qDebug()<<line; }6、接收串口的數據---當串口有數據可讀的時候會發送readyRead信號 readall
關聯有數據可讀的信號
connect(&mserial, &QSerialPort::readyRead, this, &ComWin::read_data);讀數據函數
//讀取串口數據 void ComWin::read_data() {//讀取串口數據msg = mserial.readAll();ui->textBrowser->append(msg);; }五、效果展示
?
問題咨詢及項目源碼請加群:
QQ群
名稱:IT項目交流群
群號:245022761
?
總結
以上是生活随笔為你收集整理的利用QT制作串口助手的全部內容,希望文章能夠幫你解決所遇到的問題。