0

我想用一条巨石线(右绿色)在现有的虚线(左黑色)上绘制以模拟选择效果,
但是粗线的笔画与原始虚线不对齐,
即使它们是使用相同的开始绘制/端点p1p2在此处输入图像描述

这是代码:

const QPointF p1{};
const QPointF p2{};

// draw thin black line
QPen blackPen;
blackPen.setWidth(10);
blackPen.setColor(Qt::black);
blackPen.setStyle(Qt::DotLine);

painter->setPen(blackPen);
painter->setBrush(Qt::NoBrush);
painter->drawLine(p1, p2);

// draw bold green line using the same points
QPen boldGreenPen;
boldGreenPen.setWidth(12);
boldGreenPen.setColor(Qt::green);
boldGreenPen.setStyle(Qt::DotLine);

painter->setPen(boldGreenPen);
painter->setBrush(Qt::NoBrush);
painter->drawLine(p1, p2);

是否有可能实现所需的行为?

4

1 回答 1

0

根据Qt 文档

虚线图案以笔宽为单位指定

这意味着我们必须像这样计算两条线的宽度之间的比率:

QPen pen;
const double penWidth(pen.widthF());
const auto penDashPattern(pen.dashPattern());

QPen boldPen(pen);
const double boldPenWidth(penWidth + 2);
auto boldPenDashPattern(boldPen.dashPattern());

const double ratio(penWidth / boldPenWidth);
for (auto & pattern : boldPenDashPattern)
{
    pattern *= ratio;
}

boldPen.setWidthF(boldPenWidth);
boldPen.setDashPattern(boldPenDashPattern);

painter->setPen(boldPen);

这给了我们想要的结果

于 2020-07-06T04:36:20.830 回答