WindowAppItemIsometricLine.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #pragma once
  2. #include "Common.h"
  3. #include "CommonDraw.h"
  4. /// <summary>
  5. /// 用于显示功能块等高线和等宽线的信息参数结构体
  6. /// </summary>
  7. typedef struct _tagUiIsoLineInfo
  8. {
  9. // 需要绘制等宽线的控件信息
  10. QWidget* pWidget;
  11. // 等宽线的绘制方向
  12. SIDE_DIRECTION sideDir;
  13. // 当前拖拽方向(仅确定源控件的等宽线位置时需要用到)
  14. STRETCH_DIRECTION stretchDir;
  15. // 默认构造函数
  16. _tagUiIsoLineInfo()
  17. {
  18. pWidget = nullptr;
  19. sideDir = SIDE_DIRECTION::SIDE_NONE;
  20. stretchDir = STRETCH_DIRECTION::DIR_NONE;
  21. }
  22. // 带参数构造函数
  23. _tagUiIsoLineInfo(
  24. QWidget* widget,
  25. SIDE_DIRECTION side,
  26. STRETCH_DIRECTION sDir = STRETCH_DIRECTION::DIR_NONE
  27. )
  28. {
  29. this->pWidget = widget;
  30. this->sideDir = side;
  31. this->stretchDir = sDir;
  32. }
  33. } UI_ISOLINE_INFO;
  34. /// <summary>
  35. /// UI等高线类,用于绘制和现实UI界面中控件尺寸对齐时显示的等高线和等宽线
  36. /// </summary>
  37. class WindowAppItemIsometricLine : public QObject, public QGraphicsLineItem
  38. {
  39. Q_OBJECT
  40. public:
  41. WindowAppItemIsometricLine(const UI_ISOLINE_INFO& lineInfo);
  42. // 设定本Item的自定义类型
  43. enum { Type = ITEM_TYPE_ISO_LINE };
  44. int type() const
  45. {
  46. // 针对该 item 启用 qgraphicsitem_cast
  47. return Type;
  48. }
  49. public:
  50. // 本等宽线的具体参数信息
  51. UI_ISOLINE_INFO m_isoLineInfo;
  52. protected slots:
  53. // 绘制线条
  54. void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override;
  55. protected:
  56. // 绘制等宽线
  57. void drawIsoLines(QPainter* painter);
  58. // 在指定的边旁边绘制等宽线
  59. void drawIsoLines(QPainter* painter, const QLine& side, SIDE_DIRECTION sideDir);
  60. // 绘制箭头线条
  61. void drawIsoArrowLines(QPainter* painter, QLine line1, QLine line2, SIDE_DIRECTION sideDir);
  62. // 为指定的线条绘制箭头
  63. void drawIsoArrow(QPainter* painter, QLineF isoLine);
  64. };