1

在实现类似 Word 的应用程序时,我注意到以下问题:

Qt 中的 QRasterizer 在行的厚度小于 1.0f 时会跳过行。缩小我的文字编辑器应用程序时,我遇到了这种情况。两个线点的 Y 值会变得像这样小:

  y1 = 290.32812500000000
  y2 = 290.92187500000000

渲染行时 Qt 会跳过它。我已经在 QRasterizer::rasterize() 中跟踪到以下代码,其中 min_y 和 max_y 是上述两个 Y 值乘以 64(定点值):

int iTopBound = qMax(d->clipRect.top(), int((min_y + 32 + COORD_OFFSET - COORD_ROUNDING) >> 6));
int iBottomBound = qMin(d->clipRect.bottom(), int((max_y - 32 + COORD_OFFSET - COORD_ROUNDING) >> 6));

if (iTopBound > iBottomBound)
    return;

由于 min_y 向上舍入,而 max_y 向下舍入,因此它进入 IF 条件,因此返回而不执行任何渲染。

我可以通过启用抗锯齿来解决这个问题,但是这会导致在缩小时渲染变得更亮。我真正需要的是 Microsoft Word 中的行为:无论缩小多远,黑色矩形始终在屏幕上显示为黑色矩形。

使用化妆笔可以解决问题,但不能与可自定义的线条粗细配合使用,我也需要支持。

任何想法如何解决这个问题?

问候,

费边

4

0 回答 0