旋转的箭头


  
  
  1. tesb::tesb(QWidget *parent)
  2. : QWidget(parent)
  3. {
  4. ui.setupUi( this);
  5. }
  6. void tesb::DrawCustomLine(QPainter& _painter, double _angle, double _len, const QString& _name, const QColor& _color)
  7. {
  8. // 初始化
  9. _painter.resetTransform(); // 重设画笔
  10. _painter.translate(QPoint( 300, 300));
  11. _painter.setPen(QPen(Qt::black, 2));
  12. // 绘制线段
  13. QLine _line(QPoint( 0, 0), QPoint(_len, 0));
  14. _painter.rotate(_angle);
  15. _painter.drawLine(_line);
  16. // 绘制箭头
  17. int off_x = 10;
  18. QPainterPath _path;
  19. _path.moveTo(_len-off_x, -5);
  20. _path.lineTo(_len, 0);
  21. _path.lineTo(_len-off_x, 5);
  22. _painter.drawPath(_path);
  23. // 绘制名称
  24. _painter.setPen(_color);
  25. QFont _font = _painter.font();
  26. _font.setPointSize( 10);
  27. _font.setBold( true);
  28. _painter.setFont(_font);
  29. _painter.drawText(QPoint(_len -2*off_x, -10), _name);
  30. }
  31. void tesb::paintEvent( QPaintEvent *ev )
  32. {
  33. QPainter _painter( this);
  34. _painter.setPen(QPen(Qt::black, 2));
  35. // 反锯齿
  36. _painter.setRenderHint(QPainter::Antialiasing);
  37. // 将画笔中心点移动至(300,300)
  38. _painter.translate(QPoint( 300, 300));
  39. // 绘制中心点
  40. _painter.drawPoint(QPoint( 0, 0));
  41. // 绘制外圆
  42. _painter.drawEllipse(QRect( -150, -150, 300, 300));
  43. DrawCustomLine(_painter, 0, 150, "Da", Qt::red);
  44. DrawCustomLine(_painter, 123.5, 130, "Db", Qt::green);
  45. DrawCustomLine(_painter, -45, 30, "Dc", Qt::blue);
  46. DrawCustomLine(_painter, -145, 60, "Dd", Qt::yellow);
  47. QWidget::paintEvent(ev);
  48. }


 

发布了8 篇原创文章 · 获赞 3 · 访问量 1933

猜你喜欢

转载自blog.csdn.net/weixin_44017727/article/details/97373665