#ifndef HMIDOCUMENT_H #define HMIDOCUMENT_H #include "basedocument.h" #include #include #include // 前向声明 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 m_copiedItemsData; QPointF m_lastPastePos; }; #endif // HMIDOCUMENT_H