|
- #ifndef DOCUMENT_H
- #define DOCUMENT_H
-
- #include <QWidget>
- #include <QGraphicsScene>
- #include <QGraphicsView>
- #include <QList>
- #include <QByteArray>
- #include <QPointF>
-
- // 前向声明
- class ResizableRectangle;
- class ResizableEllipse;
- class NamedItem;
-
- // 文档基类
- class BaseDocument : public QWidget
- {
- Q_OBJECT
- public:
- enum DocumentType { HMI, PLC };
- BaseDocument(DocumentType type, QWidget *parent = nullptr)
- : QWidget(parent), m_type(type) {}
- virtual ~BaseDocument() = default;
- DocumentType type() const { return m_type; }
- virtual QString title() const = 0;
-
- protected:
- DocumentType m_type;
- };
-
- // HMI文档类(包含绘图相关核心功能)
- class HMIDocument : public BaseDocument
- {
- Q_OBJECT
- public:
- HMIDocument(QWidget *parent = nullptr);
- ~HMIDocument() override;
-
- QString title() const override { return m_title; }
- void setTitle(const QString &title) { m_title = title; }
- QGraphicsView *view() const { return m_view; }
- QGraphicsScene *scene() const { return m_scene; }
-
- // 绘图控制
- void setDrawEllipse(bool enable) { m_canDrawEllipse = enable; }
- void setDrawRectangle(bool enable) { m_canDrawRectangle = enable; }
-
- // 编辑功能
- void copySelectedItems();
- void pasteItems();
- void deleteSelectedItems();
- void showItemProperties();
-
- signals:
- void titleChanged(const QString &title);
-
- protected:
- bool eventFilter(QObject *obj, QEvent *event) override;
-
- private:
- // 绘图相关
- void createEllipse(const QPointF &pos);
- void createRectangle(const QPointF &pos);
- void resetDrawFlags();
- void showContextMenu(QPoint globalPos);
-
- // 图形项序列化/反序列化
- QByteArray serializeItem(QGraphicsItem *item);
- QGraphicsItem *deserializeItem(const QByteArray &data);
-
- QString m_title;
- QGraphicsScene *m_scene;
- QGraphicsView *m_view;
- bool m_canDrawEllipse;
- bool m_canDrawRectangle;
-
- // 复制粘贴相关
- QList<QByteArray> m_copiedItemsData;
- QPointF m_lastPastePos;
- };
-
- // PLC文档类(预留,暂为空实现)
- class PLCDocument : public BaseDocument
- {
- Q_OBJECT
- public:
- PLCDocument(QWidget *parent = nullptr) : BaseDocument(PLC, parent) {}
- QString title() const override { return "PLC文档"; }
- };
-
- #endif // DOCUMENT_H
|