objectcontroller.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 ObjectController : public QWidget
  36. {
  37. Q_OBJECT
  38. public:
  39. ObjectController(QWidget *parent = 0);
  40. ~ObjectController();
  41. // 设置对象属性
  42. void setObject(QObject *object);
  43. QObject *object() const;
  44. // 清空属性表
  45. void clearProperties();
  46. // 2021-12-25增加,删除对应属性表相关的数据结构
  47. void delObject(QObject* object);
  48. // 2022-2-13 用于控件数值改变后向属性表同步
  49. void syncToObject(QObject* pControl, const OBJECT_SYNC_PROPERTY& syncInfo);
  50. private:
  51. ObjectControllerPrivate *d_ptr;
  52. // ComplexObjectController* c_ptr;
  53. Q_DECLARE_PRIVATE(ObjectController);
  54. Q_DISABLE_COPY(ObjectController);
  55. Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty*, const QVariant&));
  56. private:
  57. // 是否是基础类型控件
  58. bool isBasicControl();
  59. };
  60. #endif