案例分享:某品牌音響系列協議除錯工具(搜尋主機,查詢通道,基本控制API,雲音樂API,語言節目API等,可增刪改指令)

語言: CN / TW / HK

紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、微控制器、軟硬結合等等)持續更新中…(點選傳送門)

合作案例專欄:案例分享(體驗Demo可下載,只定制)

<br>

需求

  某音響品牌需要一套完整的協議除錯工具,提供給研發人員,渠道商,客戶,現場人員等使用:   1.使用sqlite3資料庫儲存協議,   2.搜尋主機,操作主機;   3.探測雲端API,除錯API;   4.指令包含tcp,udp,udp組播;   5.開啟pdf檢視使用說明和協議;   6.隱藏功能,管理員可就調出“控制”選單,對指令進行增改刪操作;   7.支援windows系統;

<br>

Demo:某一產品線完整系列協議

  在這裡插入圖片描述   裝置控制指令,如下:   在這裡插入圖片描述

  在這裡插入圖片描述

  在這裡插入圖片描述   通過操作裝置,獲取雲音樂(某大廠),測試該系列供應商介面是否正常:   在這裡插入圖片描述   在這裡插入圖片描述   通過操作裝置,獲取語言類節目,測試該系列雲端供應商介面是否正常:   在這裡插入圖片描述   直接搜尋主機,或者搜尋指定主機的通道數量以及對應編號:   在這裡插入圖片描述   管理員使用特殊的操作,可以調出“控制”選單,如下圖:   在這裡插入圖片描述   選取指令可以增刪改,如下圖:   在這裡插入圖片描述   在這裡插入圖片描述   在這裡插入圖片描述    在這裡插入圖片描述

<br>

標頭檔案原始碼

#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
「其他文章」