码迷,mamicode.com
首页 > 其他好文 > 详细

自己用QT写一个串口调试助手

时间:2021-05-24 09:23:52      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:items   ase   string   append   epo   win   串口   parent   http   

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

技术图片

 

自己用QT写一个串口调试助手

标签:items   ase   string   append   epo   win   串口   parent   http   

原文地址:https://www.cnblogs.com/wulianwangaxing/p/14768965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!