WindowAppItemRefLine.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #pragma once
  2. #include "Common.h"
  3. #include "CommonDraw.h"
  4. /// <summary>
  5. /// 参考线信息参数结构体
  6. /// </summary>
  7. typedef struct _tagUiRefLineInfo
  8. {
  9. // 参考线涉及的源控件和目的控件
  10. QWidget* srcWidget;
  11. QWidget* dstWidget;
  12. // 参考线涉及的源控件和目的控件的边
  13. SIDE_DIRECTION srcSide;
  14. SIDE_DIRECTION dstSide;
  15. _tagUiRefLineInfo()
  16. {
  17. srcWidget = nullptr;
  18. dstWidget = nullptr;
  19. srcSide = SIDE_DIRECTION::SIDE_NONE;
  20. dstSide = SIDE_DIRECTION::SIDE_NONE;
  21. }
  22. // 按照参数构造RefLine信息
  23. _tagUiRefLineInfo(QWidget* srcWidget, QWidget* dstWidget, SIDE_DIRECTION srcSide, SIDE_DIRECTION dstSide)
  24. {
  25. this->srcWidget = srcWidget;
  26. this->dstWidget = dstWidget;
  27. this->srcSide = srcSide;
  28. this->dstSide = dstSide;
  29. }
  30. // 重载 == 做比较
  31. bool operator == (const _tagUiRefLineInfo& lineInfo)
  32. {
  33. if (this->srcWidget == lineInfo.srcWidget
  34. && this->dstWidget == lineInfo.dstWidget
  35. && this->srcSide == lineInfo.srcSide
  36. && this->dstSide == lineInfo.dstSide
  37. )
  38. {
  39. return true;
  40. }
  41. return false;
  42. }
  43. } UI_REFLINE_INFO;
  44. /// <summary>
  45. /// UI参考线类,用于绘制和显示UI界面中控件移动的参考线
  46. /// </summary>
  47. class WindowAppItemRefLine : public QObject, public QGraphicsLineItem
  48. {
  49. Q_OBJECT
  50. public:
  51. WindowAppItemRefLine(const UI_REFLINE_INFO& lineInfo);
  52. // 设定本Item的自定义类型
  53. enum { Type = ITEM_TYPE_REF_LINE };
  54. int type() const
  55. {
  56. // 针对该 item 启用 qgraphicsitem_cast
  57. return Type;
  58. }
  59. public:
  60. // 本参考线的具体参数信息
  61. UI_REFLINE_INFO m_refLineInfo;
  62. protected slots:
  63. // 绘制线条
  64. void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override;
  65. protected:
  66. // 根据最新的控件位置信息,计算当前参考线中的起点和终点信息(方向为从上到下,从左到右)
  67. void calcLineVertex(
  68. QWidget* srcWidget,
  69. QWidget* dstWidget,
  70. _Out_ QPoint& startPoint,
  71. _Out_ QPoint& endPoint
  72. );
  73. };