若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115920854
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)
合作案例专栏:案例分享(体验Demo可下载,只定制)
需求
某音响品牌需要一套完整的协议调试工具,提供给研发人员,渠道商,客户,现场人员等使用:
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
转载:https://blog.csdn.net/qq21497936/article/details/115920854