1.在調試樂鑫的SDK調試8266的的時候,發現如果不改代碼里面的波特率,開發板默認的波特率是一個很奇怪的數字,可以改代碼但是剛好學了一會兒QT就用C++去自己寫一個串口調試助手。
話不多說先上圖
布局很簡單,水平布局,垂直布局再一起格柵布局,中間為了屏幕適應得加幾個彈簧。
步驟
1.設置在ui界面中放打開,關閉,清空按鈕,並更改一下名字,分別為clearBt,closeBt,openBt。
2.放兩個文本框,可以設置大小,最大值最小值為多少
3.放幾個Combo Box,如上圖排列,鼠標左鍵雙擊可以設置下拉的數據。
4.鼠標右鍵轉到槽,槽函數
5.源代碼如下
serial.cpp
#include "widget.h" #include "ui_widget.h" #include <QSerialPortInfo> #include <QMessageBox> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QStringList serialNamePort; serilaPort = new QSerialPort(this); //手動關聯槽 connect(serilaPort,SIGNAL(readyRead()),this,SLOT(SerilaPortReadyRead_Slot())); foreach(const QSerialPortInfo&info,QSerialPortInfo::availablePorts()) { serialNamePort<<info.portName(); } ui->serialCB->addItems(serialNamePort); } Widget::~Widget() { delete ui; } void Widget::SerilaPortReadyRead_Slot() { QString buf; buf = QString(serilaPort->readAll()); ui->recvEdit->appendPlainText(buf); } void Widget::on_openBt_clicked() { QSerialPort::BaudRate baudRate; QSerialPort::DataBits dataBits; QSerialPort::StopBits stopBits; QSerialPort::Parity checkBits; if(ui->baudCB->currentText()=="4800") { baudRate=QSerialPort::Baud4800; }else if(ui->baudCB->currentText()=="9600") { baudRate=QSerialPort::Baud9600; }else if(ui->baudCB->currentText()=="115200") { baudRate=QSerialPort::Baud115200; }else if(ui->baudCB->currentText()=="74880") { baudRate=QSerialPort::Baud74880; } else if(ui->baudCB->currentText()=="19200") { baudRate=QSerialPort::Baud19200; } else if(ui->baudCB->currentText()=="38400") { baudRate=QSerialPort::Baud38400; } else if(ui->baudCB->currentText()=="57600") { baudRate=QSerialPort::Baud57600; } if(ui->dataCB->currentText() == "5" ) { dataBits=QSerialPort::Data5; }else if(ui->dataCB->currentText() == "6") { dataBits=QSerialPort::Data6; }else if(ui->dataCB->currentText() == "7") { dataBits=QSerialPort::Data7; }else if(ui->dataCB->currentText() == "8") { dataBits=QSerialPort::Data8; } if(ui->checkCB->currentText() =="none") { checkBits=QSerialPort::NoParity; } if(ui->stopCB->currentText() =="1.5" ) { stopBits=QSerialPort::OneAndHalfStop; }else if(ui->stopCB->currentText() == "2" ) { stopBits=QSerialPort::TwoStop; }else if(ui->stopCB->currentText() == "1" ) { stopBits=QSerialPort::OneStop; } serilaPort->setPortName(ui->serialCB->currentText()); serilaPort->setBaudRate(baudRate); serilaPort->setDataBits(dataBits); serilaPort->setStopBits(stopBits); serilaPort->setParity(checkBits); if(serilaPort->open(QIODevice::ReadWrite)==true) {QMessageBox::information(this,"提示","成功");} else {QMessageBox::critical(this,"提示","失敗");} } void Widget::on_closeBt_clicked() { serilaPort->close(); } void Widget::on_sentBt_clicked() { serilaPort->write(ui->sentBt->text().toLocal8Bit().data()); } void Widget::on_clearBt_clicked() { ui->recvEdit->clear(); }
main.cpp
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QSerialPort> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); QSerialPort *serilaPort; private slots: void on_openBt_clicked(); void on_closeBt_clicked(); void SerilaPortReadyRead_Slot(); void on_sentBt_clicked(); void on_clearBt_clicked(); private: Ui::Widget *ui; }; #endif // WIDGET_H
如果需要添加波特率,需要到qserialport.h文件中的baudRate聯合體中添加,再到函數里面添加。
6.代碼打包生成exe
1.將構建方式由Debug(調試版本)改為Release
2.運行之后,沒有問題,並且在項目地址下生成一個如下文件夾:
3.改一下圖標,圖標的格式必須為ico
pro文件末尾加上 RC_ICONS=圖標名稱
4.此時打開按win+R並輸入cmd打開命令窗,輸入cd /d D:\FdogProject\QRegExpR(剛才新建文件夾中),並回車,再次輸入windeployqt QRegExp.exe,打包文件夾 里面多出各種依賴文件.
5.得到的文件夾就是了。