How to draw a line with custom round pen in Qt

I have a tile and code for generating a polyline:

bool eventFilter(QObject *obj, QEvent *event) {
    if(event->type() == QEvent::Paint) {
        QWidget *widget = qobject_cast<QWidget*>(obj);

        QBrush brush;
        brush.setTexture(QPixmap(":/light.png").scaledToWidth(8, Qt::SmoothTransformation));
        brush.setStyle(Qt::TexturePattern);

        QPen pen(brush, 8, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin);

        QPainter painter(widget);
        painter.setPen(pen);

        /* path */
        qreal startX = 10.0;
        qreal startY = widget->height()/2;

        QVector<QPointF> v = {
            QPointF(startX + 0 ,    startY + 0),
            QPointF(startX + 25,    startY + 20),
            QPointF(startX + 50,    startY + 30),
            QPointF(startX + 75,    startY - 10),
            QPointF(startX + 100,   startY + 10),
            QPointF(startX + 125,   startY - 20),
            QPointF(startX + 150,   startY - 5),
            QPointF(startX + 175,   startY + 15),
            QPointF(startX + 200,   startY + 0)
        };
        QPolygonF polygon(v);

        painter.drawPolyline(polygon);
    }

    return QObject::eventFilter(obj, event);
}

After execution, I get this image:

Bad polyline

but you need to get a polyline as follows:

True polyline

How to implement it?

+4
source share

Source: https://habr.com/ru/post/1652026/


All Articles