• 案例分享:某品牌音响系列协议调试工具(搜寻主机,查询通道,基本控制API,云音乐API,语言节目API等,可增删改指令)


    需求

      某音响品牌需要一套完整的协议调试工具,提供给研发人员,渠道商,客户,现场人员等使用:
      1.使用sqlite3数据库存储协议,
      2.搜寻主机,操作主机;
      3.探测云端API,调试API;
      4.指令包含tcp,udp,udp组播;
      5.打开pdf查看使用说明和协议;
      6.隐藏功能,管理员可就调出“控制”菜单,对指令进行增改删操作;
      7.支持windows系统;

     

    Demo:某一产品线完整系列协议

      在这里插入图片描述
      设备控制指令,如下:
      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述
      通过操作设备,获取云音乐(某大厂),测试该系列供应商接口是否正常:
      在这里插入图片描述
      在这里插入图片描述
      通过操作设备,获取语言类节目,测试该系列云端供应商接口是否正常:
      在这里插入图片描述
      直接搜索主机,或者搜索指定主机的通道数量以及对应编号:
      在这里插入图片描述
      管理员使用特殊的操作,可以调出“控制”菜单,如下图:
      在这里插入图片描述
      选取指令可以增删改,如下图:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      
    在这里插入图片描述

     

    头文件源码

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include "DbServer.h"
    
    #define PDF_EXE     "SumatraPDF.exe"
    
    class UdpTransfer;
    class QThread;
    class QTcpSocket;
    class QUdpSocket;
    class QLabel;
    class QModelIndex;
    class QTreeWidgetItem;
    class QTimer;
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    public:
        struct ChannelInfo{
            ChannelInfo(){}
            QString roomId;
            QString roomName;
            QString devStat;
        };
    
        struct HostInfo{
            HostInfo(){}
            QString ip;
            QString deviceId;
            QString deviceName;
            QString deviceType;
            QList<ChannelInfo> listChannelInfo;
        };
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    public:
        void init();
        void sendUdpData(QByteArray);
        void sendTcpData(QByteArray byteArray, QString ip, quint16 port);
    
    public slots:
        void connected();
        void disconnected();
    
    private slots:
        void btn_clicked_FaSongZhiLing();
        void lvw_clicked_ZhiLingJi();
        void ckb_clicked_XianShiZuiXin();
        void btn_clicked_ZengJiaZhiLing();
        void btn_clicked_XiuGaiZhiLing();
        void btn_clicked_ShanChuZhiLing();
        void trw_clicked_ZhuJiLieBiao(QTreeWidgetItem* item ,int index);
        void btn_clicked_SouSuoZHuJi();
        void btn_clicked_HuoDeZhuJiTongDao();
        void cmb_changed_ZhiLingLeiXing(QString typeString);
        void tim_timeout();
    
    private slots:
        void recvUdpData();
        void recvTcpData();
        void recvUdpNotify(QByteArray,QString,quint16);
    
    private slots:
        void on_btn_DaKaiXieYi_clicked();
        void on_act_SouSuoZhuJi_triggered();
        void on_act_Exit_triggered();
        void on_act_HuoQuZhuJiTongDao_triggered();
        void on_act_DaKaiXieYi_triggered();
        void on_act_About_triggered();
        void on_act_AboutQT_triggered();
        void on_btn_QingKongUdp_clicked();
        void on_btn_QingKongTcp_clicked();
        void on_btn_QingKongUdpNotify_clicked();
    
    private:
        void updateZhiLingJi();
        void showList();
        void updateHost();
    
    private:
        QString ByteArrayToPlain(QByteArray byteArray);
        QString JsonToPlain(QJsonObject & jsonObject);
        QByteArray PlainToByteArray(QString str);
    
    protected:
        void keyPressEvent(QKeyEvent * event);
        void keyReleaseEvent(QKeyEvent * event);
    
    private:
        Ui::MainWindow *ui;
        UdpTransfer *_pUdpTransfer;
        QThread *_pUdpTransferThread;
        QHash<QString, DbServer::ZhiLingJi> _hashZhiLingJi;
        QString _content;
        QTcpSocket *_pTcpSocket;
        QUdpSocket *_pUdpSocket;
        QByteArray _tcpByteArray;
        QStatusBar *_pStatusBar;
        QLabel * _pStatusLabel1;
        QLabel * _pStatusLabel2;
        QHash<QString, HostInfo> _hashHostInfo;
        DbServer::ZHILINGJI_API_TYPE _type;
        bool _ctrl;
        QProcess *_pDdf;
        QTimer *_pTimer;
    };
    #endif // MAINWINDOW_H
    
     

    若该文为原创文章,转载请注明原文出处
    本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115920854

  • 相关阅读:
    字幕文件处理(2)
    使用RelativeLayout控制WebView以及Bottom按钮的位置
    使用ActionBar Tab
    使用自定的Adapter绑定ListView/GridView数据
    Mono.Android 基础
    Azure自动化实例: 复制blog用于备份
    使用C#程序处理PowerPoint文件中的字符串
    SQL语言Select经典语句
    Row_Number() and Rank() in SQL
    C# Main函数中调用异步方法的2种实现
  • 原文地址:https://www.cnblogs.com/qq21497936/p/14818320.html
Copyright © 2020-2023  润新知