对抗Qt(QPainter)中的舍入错误?

时间:2019-01-26 11:17:30

标签: c++ qt qpainter candlestick-chart

我正在绘制一个简单的烛台图,其中包含确定烛台中心的以下公式:

x = width() + i * scale * (candle_width + candle_spacing)

i的乘积是舍入误差的来源,如您在图像中看到的,|i|越大,舍入误差被放大的越多。烛台的中心摆动。我尝试使用抗锯齿,但这只会使图像变差。在烛台图表周围拖动时(额外功能)尤其明显。我正在使用qrealdouble)进行所有计算,显然是i类型的int除外。

Snapshot

部分图像放大(8倍)以显示问题:

Part of Snapshot (8x Zoom)

1 个答案:

答案 0 :(得分:1)

解决方案是绕过Qt对坐标/宽度/高度的内部舍入,然后自己完成。我所做的就是自己对中心x进行圆角处理,然后检查圆角蜡烛宽度是否为奇/偶。如果是偶数,我将加1以使其为奇数。这是为了使中心线始终在蜡烛内居中。这是固定图像和一些代码:

auto const x(qRound(transform(i)));
auto rounded_candle_width(qRound(scaled_candle_width));
rounded_candle_width += !(rounded_candle_width % 2);

enter image description here