我可以使用QPainter绘制每顶点颜色的线条吗?

时间:2018-02-14 19:08:22

标签: qt5 qpainter

我有一个自定义Qt 5小部件,使用QPainter呈现自己。我希望能够绘制一条线,其中每个顶点与不同的颜色相关联,并且颜色沿着连接点的线相应地插入。这可能吗?

1 个答案:

答案 0 :(得分:2)

我认为您需要逐行执行绘图。假设可以接受,那么使用合适的QPen初始化的QLinearGradient应该有效...

class widget: public QWidget {
  using super = QWidget;
public:
  explicit widget (QWidget *parent = nullptr)
    : super(parent)
    {
    }
protected:
  virtual void paintEvent (QPaintEvent *event) override
    {
      super::paintEvent(event);
      QPainter painter(this);

      /*
       * Define the corners of a rectangle lying 10 pixels inside
       * the current bounding rect.
       */
      int left = 10, right = width() - 10;
      int top = 10, bottom = height() - 10;
      QPoint top_left(left, top);
      QPoint top_right(right, top);
      QPoint bottom_right(right, bottom);
      QPoint bottom_left(left, bottom);

      /*
       * Insert the points along with their required colours into
       * a suitable container.
       */
      QVector<QPair<QPoint, QColor>> points;
      points << qMakePair(top_left, Qt::red);
      points << qMakePair(top_right, Qt::green);
      points << qMakePair(bottom_right, Qt::blue);
      points << qMakePair(bottom_left, Qt::black);
      for (int i = 0; i < points.size(); ++i) {
        int e = (i + 1) % points.size();

        /*
         * Create a suitable linear gradient based on the colours
         * required for vertices indexed by i and e.
         */
        QLinearGradient gradient;
        gradient.setColorAt(0, points[i].second);
        gradient.setColorAt(1, points[e].second);
        gradient.setStart(points[i].first);
        gradient.setFinalStop(points[e].first);

        /*
         * Set the pen and draw the line.
         */
        painter.setPen(QPen(QBrush(gradient), 10.0f));
        painter.drawLine(points[i].first, points[e].first);
      }
    }
};

上述结果类似......

enter image description here

(注意:使用QPainterPathQPainterPathStroker可能有更好的方法来实现这一目标,但我不确定是否基于文档。我已经查看了。)< / p>

相关问题