#ifndef OBJECTCONTROLLER_H #define OBJECTCONTROLLER_H #include #include /// /// 控件向属性表的同步类型 /// enum class OBJECT_SYNC_TYPE : short { SYNC_TITLE, SYNC_GEOMETRY }; /// /// 需要从控件到属性表需要同步的属性 /// class QtVariantProperty; typedef struct _tagObjectSyncProproty { OBJECT_SYNC_TYPE type; // 数值类型 QVariant value; // 数值 QtVariantProperty* prop; // 对应的属性表指针 _tagObjectSyncProproty() { type = OBJECT_SYNC_TYPE::SYNC_TITLE; prop = nullptr; } } OBJECT_SYNC_PROPERTY; /// /// 设置控件对象对应的属性表 /// MEMO: 由于Table、Wave、Pie、Image四个控件是动态增加的属性 /// 所以和简单控件的固定个数的属性表相比,完全分成了两个流程进行处理 /// class ObjectControllerPrivate; class VControlObject; class ObjectController : public QWidget { Q_OBJECT public: ObjectController(QWidget *parent = 0); ~ObjectController(); // 设置对象属性 void setObject(QObject *object); QObject *object() const; VControlObject* vobject() const; // 清空属性表 void clearProperties(); // 2021-12-25增加,删除对应属性表相关的数据结构 void delObject(QObject* object); // 2022-2-13 用于控件数值改变后向属性表同步 void syncToObject(QObject* pControl, const OBJECT_SYNC_PROPERTY& syncInfo); private: ObjectControllerPrivate *d_ptr; // ComplexObjectController* c_ptr; Q_DECLARE_PRIVATE(ObjectController); Q_DISABLE_COPY(ObjectController); Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty*, const QVariant&)); private: // 是否是基础类型控件 bool isBasicControl(); }; #endif