/** * @file DataMonitorWidget.h * @author jinchao * @brief 数据监控窗口类 * @version 1.0 * @date 2025-03-10 * * @copyright Copyright (c) 2025 COMAC * */ #pragma once #include #include #include #include #include #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); /** * @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); /** * @brief 添加命名空间到树槽函数 * @param modelName 模型名称 * @param topicNameList 主题名称列表 * @param ns 命名空间定义 * @param parentItem 父项 * @param tree 树 */ void addNameSpaceToTree(const QString &modelName, const QStringList &topicNameList, const QSharedPointer &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> varDataMap; /** * @brief 追踪器 */ QCPItemTracer *m_tracer; /** * @brief 坐标标签 */ QCPItemText *m_coordLabel; };