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.得到的文件夹就是了。