|
- #ifndef HMIDOCUMENT_H
- #define HMIDOCUMENT_H
-
- #include "basedocument.h"
- #include <QGraphicsScene>
- #include <QGraphicsView>
- #include <QJsonObject>
-
- // 前向声明
- class ResizableRectangle;
- class ResizableEllipse;
- class NamedItem;
-
- class HMIDocument : public BaseDocument
- {
- Q_OBJECT
- public:
- explicit HMIDocument(QWidget *parent = nullptr);
- ~HMIDocument() override;
-
- QString title() const override;
- void setTitle(const QString &title);
- QGraphicsView *view() const;
- QGraphicsScene *scene() const;
-
- // 绘图控制
- void setDrawEllipse(bool enable);
- void setDrawRectangle(bool enable);
-
- // 编辑功能
- void copySelectedItems();
- void pasteItems();
- void deleteSelectedItems();
- void showItemProperties();
- void startDrawingEllipse();
- void startDrawingRectangle();
-
- // 保存/加载
- bool saveToFile(const QString &filePath) override;
- bool loadFromFile(const QString &filePath) override;
-
- void markModified();
-
- signals:
- void titleChanged(const QString &title);
-
- protected:
- bool eventFilter(QObject *obj, QEvent *event) override;
-
- private:
- // 辅助方法
- void createShape(const QString& type, const QPointF &pos);
- void resetDrawFlags();
- void showContextMenu(QPoint globalPos);
-
- // 序列化相关
- QByteArray serializeItem(QGraphicsItem *item);
- QGraphicsItem *deserializeItem(const QByteArray &data);
- QJsonObject itemToJson(QGraphicsItem *item);
- QGraphicsItem *jsonToItem(const QJsonObject &json);
-
- // 成员变量
- QString m_title;
- QGraphicsScene *m_scene;
- QGraphicsView *m_view;
- bool m_canDrawEllipse;
- bool m_canDrawRectangle;
-
- // 复制粘贴缓冲区
- QList<QByteArray> m_copiedItemsData;
- QPointF m_lastPastePos;
- };
-
- #endif // HMIDOCUMENT_H
|