244 lines
6.4 KiB
C++
Executable File
244 lines
6.4 KiB
C++
Executable File
/**
|
|
* @file DataMonitorWidget.h
|
|
* @author jinchao
|
|
* @brief 数据监控窗口类
|
|
* @version 1.0
|
|
* @date 2025-03-10
|
|
*
|
|
* @copyright Copyright (c) 2025 COMAC
|
|
*
|
|
*/
|
|
#pragma once
|
|
#include <QWidget>
|
|
#include <QSplitter>
|
|
#include <QTreeWidget>
|
|
#include <QTreeWidgetItem>
|
|
#include <QTableWidget>
|
|
#include "../TypeDefine.h"
|
|
#include "DataMonitorThread.h"
|
|
#include "../XNCustomPlot.h"
|
|
|
|
/**
|
|
* @brief 数据监控窗口类
|
|
*/
|
|
class DataMonitorWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
/**
|
|
* @brief 构造函数
|
|
* @param parent 父窗口
|
|
*/
|
|
explicit DataMonitorWidget(QWidget *parent = nullptr);
|
|
/**
|
|
* @brief 析构函数
|
|
*/
|
|
~DataMonitorWidget();
|
|
|
|
signals:
|
|
/**
|
|
* @brief 监控开始信号
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
*/
|
|
void monitoringStarted(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
/**
|
|
* @brief 监控停止信号
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
*/
|
|
void monitoringStopped(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
/**
|
|
* @brief 监控暂停信号
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
*/
|
|
void monitoringPaused(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
/**
|
|
* @brief 监控恢复信号
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
*/
|
|
void monitoringResumed(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
/**
|
|
* @brief 控制数据监控线程信号
|
|
* @param bActive 是否激活
|
|
*/
|
|
void controlDataMonitorThread(bool bActive);
|
|
/**
|
|
* @brief 注入一次数据信号
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
* @param value 值
|
|
*/
|
|
void injectOnceData(const QString &modelName, const QString &topicName, const QString &varName,
|
|
const double &value);
|
|
/**
|
|
* @brief 注入持续数据信号
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
* @param value 值
|
|
*/
|
|
void injectContinuousData(const QString &modelName, const QString &topicName,
|
|
const QString &varName, const double &value);
|
|
/**
|
|
* @brief 停止注入持续数据信号
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
*/
|
|
void stopInjectContinuousData(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
/**
|
|
* @brief 保存模型定义信号
|
|
* @param modelDefinition 模型定义
|
|
*/
|
|
void saveModelDefinition(const QSharedPointer<ModelDefinition> &modelDefinition);
|
|
/**
|
|
* @brief 删除模型定义信号
|
|
* @param modelName 模型名称
|
|
*/
|
|
void deleteModelDefinition(const QString &modelName);
|
|
/**
|
|
* @brief 发送调试消息信号
|
|
* @param type 消息类型
|
|
* @param message 消息内容
|
|
*/
|
|
void sendDebugMessage(int type, const QString &message);
|
|
public slots:
|
|
/**
|
|
* @brief 设置当前标签索引槽函数
|
|
* @param index 标签索引
|
|
*/
|
|
void onSetCurrentTabIndex(int index);
|
|
/**
|
|
* @brief 打开模型接口文件槽函数
|
|
*/
|
|
void openModelInterfaceFile();
|
|
/**
|
|
* @brief 添加监控数据槽函数
|
|
* @param modelName 模型名称
|
|
* @param topicName 主题名称
|
|
* @param varName 变量名称
|
|
* @param dataType 数据类型
|
|
*/
|
|
void addMonitoringData(const QString &modelName, const QString &topicName,
|
|
const QString &varName, const QString &dataType);
|
|
/**
|
|
* @brief 更新监控数据槽函数
|
|
* @param varName 变量名称
|
|
* @param value 值
|
|
*/
|
|
void updateMonitoringData(const QString &varName, const QString &value);
|
|
/**
|
|
* @brief 发送调试消息槽函数
|
|
* @param type 消息类型
|
|
* @param message 消息内容
|
|
*/
|
|
void onSendDebugMessage(int type, const QString &message);
|
|
|
|
private:
|
|
/**
|
|
* @brief 初始化数据监控线程
|
|
*/
|
|
void InitialDataMonitorThread();
|
|
/**
|
|
* @brief 设置数据监控标签槽函数
|
|
*/
|
|
void setupTabDataMonitoring();
|
|
/**
|
|
* @brief 设置数据监控左侧面板槽函数
|
|
* @param splitter 分割器
|
|
*/
|
|
void setupTabDataMonitoringLeftPanel(QSplitter *splitter);
|
|
/**
|
|
* @brief 更新接口信息页面槽函数
|
|
* @param modelDefinition 模型定义
|
|
*/
|
|
void updateInterfaceInfoPage(QSharedPointer<ModelDefinition> modelDefinition);
|
|
/**
|
|
* @brief 添加命名空间到树槽函数
|
|
* @param modelName 模型名称
|
|
* @param topicNameList 主题名称列表
|
|
* @param ns 命名空间定义
|
|
* @param parentItem 父项
|
|
* @param tree 树
|
|
*/
|
|
void addNameSpaceToTree(const QString &modelName, const QStringList &topicNameList,
|
|
const QSharedPointer<NamespaceDefinition> &ns,
|
|
QTreeWidgetItem *parentItem, QTreeWidget *tree);
|
|
/**
|
|
* @brief 设置数据监控右侧面板槽函数
|
|
* @param splitter 分割器
|
|
*/
|
|
void setupTabDataMonitoringRightPanel(QSplitter *splitter);
|
|
/**
|
|
* @brief 设置数据监控表格槽函数
|
|
* @param dataMonitoringTableWidget 数据监控表格
|
|
*/
|
|
void setupDataMonitoringTableWidget(QTableWidget *dataMonitoringTableWidget);
|
|
/**
|
|
* @brief 设置数据监控图表槽函数
|
|
* @param dataMonitoringChartWidget 数据监控图表
|
|
*/
|
|
void setupDataMonitoringChartWidget(QWidget *dataMonitoringChartWidget);
|
|
/**
|
|
* @brief 设置绘图部件槽函数
|
|
* @param customPlot 绘图部件
|
|
*/
|
|
void setupPlotWidget(XNCustomPlot *customPlot);
|
|
/**
|
|
* @brief 搜索模型接口槽函数
|
|
* @param text 文本
|
|
*/
|
|
void searchModelInterface(const QString &text);
|
|
/**
|
|
* @brief 显示所有树项槽函数
|
|
* @param item 树项
|
|
*/
|
|
void showAllTreeItems(QTreeWidgetItem *item);
|
|
/**
|
|
* @brief 隐藏所有树项槽函数
|
|
* @param item 树项
|
|
*/
|
|
void hideAllTreeItems(QTreeWidgetItem *item);
|
|
/**
|
|
* @brief 搜索并显示匹配项槽函数
|
|
* @param item 树项
|
|
* @param text 文本
|
|
* @return 是否搜索成功
|
|
*/
|
|
bool searchAndShowMatchingItems(QTreeWidgetItem *item, const QString &text);
|
|
|
|
private:
|
|
/**
|
|
* @brief 当前标签索引
|
|
*/
|
|
int currentTabIndex = 0;
|
|
/**
|
|
* @brief 数据监控线程
|
|
*/
|
|
DataMonitorThread *dataMonitorThread;
|
|
/**
|
|
* @brief 变量数据映射
|
|
*/
|
|
QMap<QString, QVector<double>> varDataMap;
|
|
/**
|
|
* @brief 追踪器
|
|
*/
|
|
QCPItemTracer *m_tracer;
|
|
/**
|
|
* @brief 坐标标签
|
|
*/
|
|
QCPItemText *m_coordLabel;
|
|
}; |