treeviewmanager.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #ifndef TREEVIEWMANAGER_H
  2. #define TREEVIEWMANAGER_H
  3. #include <QWidget>
  4. #include <QTreeView>
  5. #include <QJsonObject>
  6. #include <QStandardItemModel>
  7. #include <QMap>
  8. #include <QCheckBox>
  9. #include <QJsonDocument>
  10. #include <QJsonArray>
  11. #include <QFile>
  12. #include <QVBoxLayout>
  13. #include <QLabel>
  14. #include <QLineEdit>
  15. #include <QComboBox>
  16. #include <QRadioButton>
  17. #include <QButtonGroup>
  18. #include <QDebug>
  19. #include <QPushButton>
  20. #include <QStyleFactory>
  21. class TreeViewManager : public QWidget
  22. {
  23. Q_OBJECT
  24. public:
  25. /**
  26. * @brief 构造函数
  27. * @param parent 父窗口
  28. * @param downView 完整目录树的视图
  29. * @param widget2 父组件,用于确定导航栏位置
  30. * @param horizontalLayout2 用于计算导航栏宽度
  31. */
  32. explicit TreeViewManager(QWidget *parent, QWidget *widget2);
  33. /**
  34. * @brief 加载 JSON 数据并初始化树视图
  35. * @param filePath JSON 文件路径
  36. */
  37. void loadJsonFromFile(const QString &filePath);
  38. void loadTreeData(const QJsonDocument &doc);
  39. //void setupTreeData();
  40. void applyCustomStyles();
  41. /**
  42. * @brief 更新导航栏内容,根据点击的目录项动态显示
  43. * @param index 点击的目录项索引
  44. */
  45. void updateNavigationBar(const QModelIndex &index);
  46. private:
  47. // 界面组件
  48. QWidget *widget2; // 父组件,用于确定导航栏位置
  49. QTreeView *treeViewDown; // 完整目录树
  50. QStandardItemModel *downModel; // 树状结构模型
  51. QWidget *navigationWidget; // 动态导航栏窗口
  52. QVBoxLayout *navigationLayout; // 导航栏布局
  53. QPushButton *buttonOpenFile; // 返回一级菜单
  54. QPushButton *buttonUp; // 遍历导航向上
  55. QPushButton *buttonDown; // 遍历导航向下
  56. QPushButton *buttonLeft; // 进入下一级目录
  57. QPushButton *buttonRight; // 返回上一级目录
  58. QModelIndex getNextIndex(const QModelIndex &currentIndex);
  59. void setupButton(); // 创建并初始化按钮
  60. /**
  61. * @brief 构建目录树
  62. * @param jsonObj JSON 数据对象
  63. * @param parent 父节点
  64. */
  65. void buildTree(const QJsonObject &jsonObj, QStandardItem *parent);
  66. /**
  67. * @brief 显示字段属性(仅用于构建树,不涉及字段窗口)
  68. * @param fields 字段数据
  69. */
  70. //void displayFields(const QJsonObject &fields);
  71. /**
  72. * @brief 显示三级目录的字段内容(打开新窗口)
  73. * @param fields 字段数据
  74. */
  75. void displayThirdLevelFields(const QJsonObject &fields);
  76. /**
  77. * @brief 更新导航栏窗口的几何位置
  78. */
  79. void updateNavigationWidgetGeometry();
  80. private slots:
  81. void onButtonOpenFileClicked(); // 槽函数:返回一级菜单
  82. void onButtonUpClicked(); // 槽函数:遍历导航向上
  83. void onButtonDownClicked(); // 槽函数:遍历导航向下
  84. void onButtonLeftClicked(); // 槽函数:进入下一级目录
  85. void onButtonRightClicked(); // 槽函数:返回上一级目录
  86. };
  87. #endif // TREEVIEWMANAGER_H