WindowAppBlockComment.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #pragma once
  2. #include "Common.h"
  3. #include "CommonDraw.h"
  4. class WindowAppBlockComment : public QGraphicsTextItem
  5. {
  6. Q_OBJECT
  7. public:
  8. WindowAppBlockComment(QGraphicsItem* parent = nullptr);
  9. ~WindowAppBlockComment();
  10. //// 设置注释的文字
  11. //void setComment(const QString& strComm);
  12. // 设定本Item的自定义类型
  13. enum { Type = ITEM_TYPE_COMMENT };
  14. int type() const override
  15. {
  16. return Type;
  17. }
  18. protected slots:
  19. // 绘制注释控件边框
  20. void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
  21. // 在选中发生变化时
  22. QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
  23. void focusOutEvent(QFocusEvent* event) override;
  24. // void keyReleaseEvent(QKeyEvent* event) override;
  25. // 在文本内容变更时触发,自动更新边距
  26. void onContentsChanged();
  27. // 响应双击事件,激活文本编辑模式
  28. void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event);
  29. //// 键盘按下时(回车键结束编辑)
  30. //void keyPressEvent(QKeyEvent* event) override;
  31. // 计算区域边界
  32. QRectF boundingRect() const override;
  33. // 重写Shape函数,使其没有文字的空白部分也可以响应消息
  34. QPainterPath shape() const override;
  35. //void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override;
  36. //void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override;
  37. void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override;
  38. void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
  39. void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
  40. void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
  41. // 绘制选中状态
  42. virtual void paintSelected(QPainter* painter, int iLineWidth);
  43. signals:
  44. void lostFocus(WindowAppBlockComment* item);
  45. void selectedChange(QGraphicsItem* item);
  46. protected:
  47. // 初始化UI风格
  48. void initStyle();
  49. // 绘制边框
  50. void drawFrame(QPainter* painter);
  51. //// 绘制文字
  52. //void drawContent(QPainter* painter);
  53. // 更新矩形区域的尺寸
  54. void updateRect();
  55. //// 刷新全部(包括文字和尺寸)
  56. //void updateAll();
  57. protected:
  58. // 控件的拉伸状态
  59. enum ResizeDirection
  60. {
  61. ResizeNone = 0,
  62. ResizeLeft = 1,
  63. ResizeRight = 2,
  64. ResizeTop = 4,
  65. ResizeBottom = 8,
  66. AllDirections = 15,
  67. };
  68. // 当前拉伸的方向
  69. quint32 reDirection;
  70. // 主体矩形区域
  71. QRectF blockRect;
  72. //// 边界矩形区域
  73. //QRectF blockBoundingRect;
  74. // 是否处于选中状态
  75. bool m_bSel;
  76. // 注释的文字
  77. QString m_strComment;
  78. // 是否处于拉伸状态中
  79. bool resizing;
  80. // 保存上一次的状态
  81. QPointF oldPos;
  82. int oldWidth;
  83. int oldHeight;
  84. };