XNSim/XNMonitor/DataMonitorWidget/DataMonitorWidget.h
2025-04-28 12:25:20 +08:00

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;
};