在实现类似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中的行为:无论你缩小多远,黑色矩形总是在屏幕上保持可见为黑色矩形。
使用化妆笔可以解决问题,但不能与可自定义的线条厚度一起使用,我也需要支持。
任何想法如何解决此问题?
问候,
费边