objectcontroller.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 
  2. #ifndef OBJECTCONTROLLER_H
  3. #define OBJECTCONTROLLER_H
  4. #include <QWidget>
  5. #include <QVariant>
  6. /// <summary>
  7. /// 控件向属性表的同步类型
  8. /// </summary>
  9. enum class OBJECT_SYNC_TYPE : short
  10. {
  11. SYNC_TITLE,
  12. SYNC_GEOMETRY
  13. };
  14. /// <summary>
  15. /// 需要从控件到属性表需要同步的属性
  16. /// </summary>
  17. class QtVariantProperty;
  18. typedef struct _tagObjectSyncProproty
  19. {
  20. OBJECT_SYNC_TYPE type; // 数值类型
  21. QVariant value; // 数值
  22. QtVariantProperty* prop; // 对应的属性表指针
  23. _tagObjectSyncProproty()
  24. {
  25. type = OBJECT_SYNC_TYPE::SYNC_TITLE;
  26. prop = nullptr;
  27. }
  28. } OBJECT_SYNC_PROPERTY;
  29. /// <summary>
  30. /// 设置控件对象对应的属性表
  31. /// MEMO: 由于Table、Wave、Pie、Image四个控件是动态增加的属性
  32. /// 所以和简单控件的固定个数的属性表相比,完全分成了两个流程进行处理
  33. /// </summary>
  34. class ObjectControllerPrivate;
  35. class VControlObject;
  36. class ObjectController : public QWidget
  37. {
  38. Q_OBJECT
  39. public:
  40. ObjectController(QWidget *parent = 0);
  41. ~ObjectController();
  42. // 设置对象属性
  43. void setObject(QObject *object);
  44. QObject *object() const;
  45. VControlObject* vobject() const;
  46. // 清空属性表
  47. void clearProperties();
  48. // 2021-12-25增加,删除对应属性表相关的数据结构
  49. void delObject(QObject* object);
  50. // 2022-2-13 用于控件数值改变后向属性表同步
  51. void syncToObject(QObject* pControl, const OBJECT_SYNC_PROPERTY& syncInfo);
  52. private:
  53. ObjectControllerPrivate *d_ptr;
  54. // ComplexObjectController* c_ptr;
  55. Q_DECLARE_PRIVATE(ObjectController);
  56. Q_DISABLE_COPY(ObjectController);
  57. Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty*, const QVariant&));
  58. private:
  59. // 是否是基础类型控件
  60. bool isBasicControl();
  61. };
  62. #endif