//pluginItemWrapper.h #pragma once #include "functionModelItem/graphicsFunctionModelItem.h" #include "pluginCommon/iCanvasItem.h" #include // 内部包装器,不暴露给外部 class PluginItemWrapper : public GraphicsFunctionModelItem { Q_OBJECT public: explicit PluginItemWrapper(ICanvasItem *pluginItem, QGraphicsItem *parent = nullptr); virtual ~PluginItemWrapper(); // 克隆 virtual GraphicsFunctionModelItem* clone() const override; // 绘图 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; virtual QRectF boundingRect() const override; virtual QPainterPath shape() const override; // 几何操作 virtual void updateCoordinate() override; virtual void resize(int handle, double dx, double dy, const QPointF &pos) override; virtual void move(const QPointF &delta) override; // 获取插件项 ICanvasItem* pluginItem() const; protected: virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value) override; private: ICanvasItem *m_pluginItem = nullptr; QRectF m_cachedBounds; void updateCache(); void connectSignals(); QVariantMap saveState() const; bool loadStateIntoPluginItem(ICanvasItem *pluginItem, const QVariantMap &state) const; void copyPropertiesFrom(const PluginItemWrapper *source); private slots: void onPluginBoundsChanged(const QRectF &newBounds); void onPluginPropertyChanged(const QString &key, const QVariant &value); };