zoukankan      html  css  js  c++  java
  • 自己用QT写一个串口调试助手

    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:FdogProjectQRegExpR(刚才新建文件夹中),并回车,再次输入windeployqt QRegExp.exe,打包文件夹  里面多出各种依赖文件.

    5.得到的文件夹就是了。

  • 相关阅读:
    课程设计——五子棋(201521123038)
    JAVA课程设计——单机版五子棋
    201521123038 《Java程序设计》 第十四周学习总结
    201521123038 《Java程序设计》 第十三周学习总结
    网络15软工个人作业5——软件工程总结
    201521123035-个人作业4——alpha阶段个人总结
    201521123035个人作业3
    201521123035结对编程
    201521123035软工阅读作业2
    软件工程个人阅读作业1
  • 原文地址:https://www.cnblogs.com/wulianwangaxing/p/14768965.html
Copyright © 2011-2022 走看看