DiagramDesigner/diagramCavas/include/graphicsItem/pluginSvgItemWrapper.h

54 lines
1.6 KiB
C++

//pluginSvgItemWrapper.h
#pragma once
#include "functionModelItem/electricFunctionModelSvgItem.h"
#include "pluginCommon/iCanvasItem.h"
#include <QObject>
// 内部包装器,不暴露给外部
class PluginSvgItemWrapper : public ElectricFunctionModelSvgItem
{
Q_OBJECT
public:
explicit PluginSvgItemWrapper(ICanvasItem *pluginItem, QGraphicsItem *parent = nullptr);
virtual ~PluginSvgItemWrapper();
virtual void setImage_1(QFileInfo) override;
// 克隆
virtual ElectricFunctionModelSvgItem* 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 PluginSvgItemWrapper *source);
private slots:
void onPluginBoundsChanged(const QRectF &newBounds);
void onPluginPropertyChanged(const QString &key, const QVariant &value);
};