Qt CustomDashLine会对范围外Path自动裁剪问题

发布时间 2023-10-24 18:49:07作者: 77_learning

  在使用QPainter进行绘制时发现问题。当直接使用QPen进行绘制自定义虚线时会出现一个问题:

    当绘制的Path遇到界面进行裁剪时,此时虚线线型将会省略裁剪的那一部分,导致自定义虚线在移动以及放大时会自动修改位置。

  解决办法:直接使用QPainterPathSkroke。

  问题描述如下:

    自定义虚线如下。

  

      移动位置后虚线的位置自动变化:

 

上述错误代码如下:

    QPen pen;
    pen.setStyle(Qt::CustomDashLine);
    pen.setJoinStyle(Qt::RoundJoin);
    pen.setCapStyle(Qt::SqareCap);
    QVector<qreal> dashlines{30.0,20.0,10.0,20.0};
    pen.setDashPattern(dashlines);
    painter->setPen(pen);
    painter->drawPath(path);

解决方法如下: 

    QPainterPathStroker stroke;
    stroke.setStyle(Qt::CustomDashLine);
    stroke.setJoinStyle(Qt::RoundJoin);
    stroke.setCapStyle(Qt::SqareCap);
    QPainterPath strokePath = stroker.createStroke(path);
    QVector<qreal> dashlines{30.0,20.0,10.0,20.0};
    strokePath.setDashPattern(dashlines);
    painter->setPen(pen);
    painter->drawPath(strokePath);

解决后效果如下: