diff options
Diffstat (limited to 'src/libs/modelinglib/qmt/diagram_scene/parts/arrowitem.cpp')
-rw-r--r-- | src/libs/modelinglib/qmt/diagram_scene/parts/arrowitem.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/libs/modelinglib/qmt/diagram_scene/parts/arrowitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/parts/arrowitem.cpp index 3a14eb10d99..632da76f05a 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/parts/arrowitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/parts/arrowitem.cpp @@ -384,27 +384,29 @@ void ArrowItem::updateShaft(const Style *style) QMT_ASSERT(m_shaftItem, return); QPen pen(style->linePen()); + pen.setCapStyle(Qt::FlatCap); + + auto scale = [&pen](qreal v) { + return v / ((pen.widthF() - 1.0) / 2.0 + 1.0); + }; + switch (m_shaft) { case ShaftSolid: break; case ShaftDashed: - pen.setDashPattern(QVector<qreal>() - << (4.0 / pen.widthF()) << (4.0 / pen.widthF())); + pen.setDashPattern(QVector<qreal>() << scale(5.0) << scale(3.0)); break; case ShaftDot: - pen.setDashPattern(QVector<qreal>() - << (2.0 / pen.widthF()) << (2.0 / pen.widthF())); + pen.setDashPattern(QVector<qreal>() << scale(3.0) << scale(3.0)); break; case ShaftDashDot: - pen.setDashPattern(QVector<qreal>() - << (4.0 / pen.widthF()) << (2.0 / pen.widthF()) - << (2.0 / pen.widthF()) << (2.0 / pen.widthF())); + pen.setDashPattern(QVector<qreal>() << scale(5.0) << scale(3.0) + << scale(3.0) << scale(3.0)); break; case ShaftDashDotDot: - pen.setDashPattern(QVector<qreal>() - << (4.0 / pen.widthF()) << (2.0 / pen.widthF()) - << (2.0 / pen.widthF()) << (2.0 / pen.widthF()) - << (2.0 / pen.widthF()) << (2.0 / pen.widthF())); + pen.setDashPattern(QVector<qreal>() << scale(5.0) << scale(3.0) + << scale(3.0) << scale(3.0) + << scale(3.0) << scale(3.0)); break; } m_shaftItem->setPen(pen); |