basicobjectcontroller.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #ifndef BASICOBJECTCONTROLLER_H
  2. #define BASICOBJECTCONTROLLER_H
  3. #include <QWidget>
  4. #include <QMetaObject>
  5. #include <QMetaProperty>
  6. #include <QVBoxLayout>
  7. #include <QScrollArea>
  8. #include <QApplication>
  9. #include <QDebug>
  10. #include "VTableControl.h"
  11. class QtProperty;
  12. class QtVariantProperty;
  13. class ObjectController;
  14. class VTableControl;
  15. class QtVariantPropertyManager;
  16. class QtTreePropertyBrowser;
  17. class BasicObjectController
  18. {
  19. BasicObjectController();
  20. ObjectController* q_ptr;
  21. Q_DECLARE_PUBLIC(ObjectController)
  22. public:
  23. void expandAll();
  24. void collapseAll();
  25. void saveExpandedState();
  26. void restoreExpandedState();
  27. void slotValueChanged(QtProperty* property, const QVariant& value);
  28. int enumToInt(const QMetaEnum& metaEnum, int enumValue) const;
  29. int intToEnum(const QMetaEnum& metaEnum, int intValue) const;
  30. int flagToInt(const QMetaEnum& metaEnum, int flagValue) const;
  31. int intToFlag(const QMetaEnum& metaEnum, int intValue) const;
  32. bool isSubValue(int value, int subValue) const;
  33. bool isPowerOf2(int value) const;
  34. // 设置控件属性
  35. void setBasicControlProperties(const QMetaObject* metaObject);
  36. // 设置复杂控件属性
  37. void setComplexControlProperties();
  38. // 增加新的基础属性
  39. void addBasicProperties(const QMetaObject* metaObject, QtProperty*& classProperty);
  40. // 增加新的扩展属性
  41. void addExtendProperties(QtProperty*& classProperty);
  42. // 向界面属性表中增加属性内容
  43. void addPropertiesSubGroup(const PROPERTY_EX_SUBGROUP& prop);
  44. // 更新基础属性
  45. void changeBasicProperties(QtProperty* property, const QVariant& value);
  46. // 更新扩展属性
  47. void changeExtendProperties(QtProperty* property, const QVariant& value);
  48. //// 调整Table控件的属性个数
  49. //void updateTablePropertyCount(const int newCount);
  50. // 增加新的属性项
  51. void appendTableProperty(VTableControl* pTable, const int fixCount);
  52. // 减少新的属性项
  53. void removeTableProperty(VTableControl* pTable, const int fixCount);
  54. // 更新基础属性表
  55. void updateBasicProperties(const QMetaObject* metaObject);
  56. // 更新扩展属性表
  57. void updateExtendProperties(const QMetaObject* metaObject);
  58. public:
  59. // 绑定的控件对象指针
  60. QObject* m_object;
  61. // 属性和QMetaObject的双向对应关系(用于简单控件)
  62. QMap<const QMetaObject*, QtProperty*> m_classToProperty;
  63. // 属性和Index索引的对应关系
  64. QMap<QtProperty*, int> m_propertyToIndex;
  65. // QMetaObject和索引以及对应属性的关系
  66. QMap<const QMetaObject*, QMap<int, QtVariantProperty*> > m_classToIndexToProperty;
  67. // 每个属性是否展开
  68. QMap<QtProperty*, bool> m_propertyToExpanded;
  69. // 属性表顶层节点
  70. QList<QtProperty*> m_topLevelProperties;
  71. // 2021-9-11 修改 此处直接使用 QtTreePropertyBrowser 指针即可
  72. QtTreePropertyBrowser* m_browser;
  73. // 属性数据结构管理者
  74. QtVariantPropertyManager* m_manager;
  75. // 只读属性数据结构管理者
  76. QtVariantPropertyManager* m_readOnlyManager;
  77. // 2021-12-2 属性指针与属性名字对应关系
  78. QMap<QtProperty*, QString> m_propertyToName;
  79. // 2021-12-3 扩展属性根节点
  80. QtProperty* m_exPropertiesRoot;
  81. // 2021-12-3 扩展子属性组
  82. QList<QtProperty*> m_subGroups;
  83. // 2021-12-23 用于保存对象以及扩展属性的对应关系,用于后续更新
  84. QMap<const QObject*, QMap<QString, QtVariantProperty*>> m_objectToNameToProperty;
  85. // 属性和QObject的双向对应关系(用于复杂控件)
  86. QMap<const QObject*, QtProperty*> m_objectToProperty;
  87. };
  88. #endif