Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

75 řádky
1.8 KiB

  1. #ifndef HMIDOCUMENT_H
  2. #define HMIDOCUMENT_H
  3. #include "basedocument.h"
  4. #include <QGraphicsScene>
  5. #include <QGraphicsView>
  6. #include <QJsonObject>
  7. // 前向声明
  8. class ResizableRectangle;
  9. class ResizableEllipse;
  10. class NamedItem;
  11. class HMIDocument : public BaseDocument
  12. {
  13. Q_OBJECT
  14. public:
  15. explicit HMIDocument(QWidget *parent = nullptr);
  16. ~HMIDocument() override;
  17. QString title() const override;
  18. void setTitle(const QString &title);
  19. QGraphicsView *view() const;
  20. QGraphicsScene *scene() const;
  21. // 绘图控制
  22. void setDrawEllipse(bool enable);
  23. void setDrawRectangle(bool enable);
  24. // 编辑功能
  25. void copySelectedItems();
  26. void pasteItems();
  27. void deleteSelectedItems();
  28. void showItemProperties();
  29. void startDrawingEllipse();
  30. void startDrawingRectangle();
  31. // 保存/加载
  32. bool saveToFile(const QString &filePath) override;
  33. bool loadFromFile(const QString &filePath) override;
  34. void markModified();
  35. signals:
  36. void titleChanged(const QString &title);
  37. protected:
  38. bool eventFilter(QObject *obj, QEvent *event) override;
  39. private:
  40. // 辅助方法
  41. void createShape(const QString& type, const QPointF &pos);
  42. void resetDrawFlags();
  43. void showContextMenu(QPoint globalPos);
  44. // 序列化相关
  45. QByteArray serializeItem(QGraphicsItem *item);
  46. QGraphicsItem *deserializeItem(const QByteArray &data);
  47. QJsonObject itemToJson(QGraphicsItem *item);
  48. QGraphicsItem *jsonToItem(const QJsonObject &json);
  49. // 成员变量
  50. QString m_title;
  51. QGraphicsScene *m_scene;
  52. QGraphicsView *m_view;
  53. bool m_canDrawEllipse;
  54. bool m_canDrawRectangle;
  55. // 复制粘贴缓冲区
  56. QList<QByteArray> m_copiedItemsData;
  57. QPointF m_lastPastePos;
  58. };
  59. #endif // HMIDOCUMENT_H