CLineItem.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "CLineItem.h"
  2. CLineItem::CLineItem(QGraphicsItem *parent) : CLineItem(QPointF(), QPointF(), parent) { }
  3. CLineItem::CLineItem(const QPointF &startPos, const QPointF &endPos, QGraphicsItem *parent)
  4. : CPathItem(parent), m_startPos(startPos), m_endPos(endPos)
  5. {
  6. setNormalLineColor(Qt::gray);
  7. setLineWidth(5);
  8. updatePath();
  9. }
  10. CLineItem::CLineType CLineItem::lineType() const
  11. {
  12. return m_lineType;
  13. }
  14. void CLineItem::setLineType(CLineItem::CLineType type)
  15. {
  16. m_lineType = type;
  17. updatePath();
  18. }
  19. void CLineItem::updatePath()
  20. {
  21. QPainterPath path;
  22. switch (m_lineType) {
  23. case Curve: {
  24. path.moveTo(m_startPos);
  25. double d = (m_endPos.x() - m_startPos.x()) / 4;
  26. QPointF ctr1 = QPointF(m_startPos.x() + d, m_startPos.y());
  27. QPointF ctr2 = QPointF(m_endPos.x() - d, m_endPos.y());
  28. path.cubicTo(ctr1, ctr2, m_endPos);
  29. break;
  30. }
  31. case Line: {
  32. path.moveTo(m_startPos);
  33. path.lineTo(m_endPos);
  34. break;
  35. }
  36. case Polyline: {
  37. path.moveTo(m_startPos);
  38. path.lineTo(QPointF(m_startPos.x() + 20, m_startPos.y()));
  39. path.lineTo(QPointF(m_startPos.x() + 20, m_endPos.y()));
  40. path.lineTo(m_endPos);
  41. break;
  42. }
  43. case CurveToLine: {
  44. path.moveTo(m_startPos);
  45. double d = 5;
  46. QPointF ctr1 = QPointF(m_startPos.x() + d, m_startPos.y());
  47. QPointF ctr2 = QPointF(m_startPos.x() + d * 2, m_endPos.y());
  48. QPointF p = QPointF(m_startPos.x() + d * 3, m_endPos.y());
  49. path.cubicTo(ctr1, ctr2, p);
  50. path.lineTo(m_endPos);
  51. break;
  52. }
  53. }
  54. setPath(path);
  55. }