/** * @file mainwindow.h * @author jinchao * @brief 主窗口类 * @version 1.0 * @date 2025-02-14 * * @copyright Copyright (c) 2025 COMAC * */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE /** * @brief 成员变量结构体 */ struct MemberVariable { QString dataType; QString variableName; bool isArray; QVector arraySizes; QString description; }; /** * @brief 结构体定义结构体 */ struct StructDefinition { QString structName; QVector> memberVariables; }; /** * @brief 命名空间定义结构体 */ struct NamespaceDefinition { QString namespaceName; QVector> structDefinitions; QVector> childNamespaces; }; /** * @brief 主窗口类 */ class MainWindow : public QMainWindow { Q_OBJECT public: /** * @brief 构造函数 * @param parent 父窗口 */ MainWindow(QWidget *parent = nullptr); /** * @brief 构造函数 * @param fileName 文件名 * @param parent 父窗口 */ MainWindow(QString fileName, QWidget *parent = nullptr); /** * @brief 析构函数 */ ~MainWindow(); public slots: /** * @brief 新建文件槽函数 */ void onNewFileTriggered(); /** * @brief 打开文件槽函数 */ void onOpenFileTriggered(); /** * @brief 关闭文件槽函数 */ void onCloseFileTriggered(); /** * @brief IDL树型结构元素点击响应, * @param item: 树型结构元素 */ void onTreeWidgetItemClicked(QTreeWidgetItem *item); private: /** * @brief 初始化菜单 */ void initMenu(); /** * @brief 初始化文件菜单 */ void initFileMenu(); /** * @brief 初始化编辑菜单 */ void initEditMenu(); /** * @brief 初始化中心组件 * @param style: 中心组件类型 0:运行环境配置文件类型 1:模型/服务配置文件类型 2:IDL文件类型 */ void initCentralWidget(int style = 0); /** * @brief 初始化IDL树形控件 */ void initIDLTreeWidget(); /** * @brief 打开场景配置文件 */ void openScenarioFile(); /** * @brief 打开模型配置文件 */ void openModelFile(); /** * @brief 打开服务配置文件 */ void openServiceFile(); /** * @brief 打开IDL文件 */ void openIDLFile(); /** * @brief 保存文件 */ void saveFile(QString filePath); /** * @brief 保存场景配置文件 */ void saveScenarioFile(QString filePath); /** * @brief 保存模型配置文件 */ void saveModelFile(QString filePath); /** * @brief 保存服务配置文件 */ void saveServiceFile(QString filePath); /** * @brief 保存IDL文件 */ void saveIDLFile(QString filePath); /** * @brief 添加组框1,label,lineEdit类型 * @param layout 布局 * @param name 名称 * @param attributes 属性 */ void addGroupBox(QVBoxLayout *layout, QString name, QDomNamedNodeMap attributes); /** * @brief 添加组框2,comboBox类型 * @param layout 布局 * @param name 名称 * @param attributes 属性 */ void addGroupBox2(QVBoxLayout *layout, QString name, QDomNamedNodeMap attributes); /** * @brief 添加组框3,tabwidget类型 * @param layout 布局 * @param name 名称 * @param groupAttributes 组属性 * @param vecAttributes 属性 * @param type 类型 */ void addGroupBox3(QVBoxLayout *layout, QString name, QDomNamedNodeMap groupAttributes, QVector vecAttributes, int type); /** * @brief 向组框1中添加item * @param gridLayout 布局 * @param itemName 名称 * @param itemValue 值 * @param itemStyle 样式 */ void addItemIntoGroupBox(QGridLayout *gridLayout, QString itemName, QString itemValue, int itemStyle); /** * @brief 设置lineEdit的规则 * @param lineEdit lineEdit * @param name 名称 */ void setLineEditRules(QLineEdit *lineEdit, QString name); /** * @brief 查找模型 * @param modelName 模型名称 * @param ModelPath 模型路径 * @return true 找到 * @return false 未找到 */ bool findModel(QString modelName, QString ModelPath); /** * @brief 查找服务 * @param serviceName 服务名称 * @param ServicePath 服务路径 * @return true 找到 * @return false 未找到 */ bool findService(QString serviceName, QString ServicePath); /** * @brief 更新模型列表 * @param tabWidget 表格 */ void UpdateModelList(QTableWidget *tabWidget); /** * @brief 更新服务列表 * @param tabWidget 表格 */ void UpdateServiceList(QTableWidget *tabWidget); /** * @brief 在新的窗口中打开文件 * @param fileName 文件名 */ void openFileInNewWindow(QString fileName); /** * @brief 连接修改信号 * @param widget 窗口 */ void connectModificationSignals(QWidget *widget); /** * @brief 更新窗口标题 */ void updateWindowTitle(); /** * @brief 添加加号按钮 * @param layout 布局 */ void addPlusButton(QGridLayout *layout); public: /** * @brief 当前文件路径 */ QString currentFilePath; /** * @brief 当前文件类型 0: 场景配置文件 1: 模型配置文件 2: 服务配置文件 3: IDL文件 */ int currentFileType; private: /** * @brief 主窗口ui */ Ui::MainWindow *ui; /** * @brief 模型路径 */ QString modelPath; /** * @brief 服务路径 */ QString ServicePath; /** * @brief 是否修改 */ bool isModified; /** * @brief 命名空间定义 */ QVector> namespaces; /** * @brief 根据namespaces更新IDL树形控件 */ void updateIDLTreeWidget(); protected: /** * @brief 关闭事件 * @param event 事件 */ void closeEvent(QCloseEvent *event) override; }; #endif // MAINWINDOW_H