【发布时间】:2011-11-03 13:28:08
【问题描述】:
我使用 QPainter::setRenderHint(QPainter::Antialiasing, true) 告诉 Qt 我希望它对我所做的任何绘图进行抗锯齿处理(在这种情况下,使用 drawText() 绘制的文本)。
这工作正常,文本看起来不错,直到我想旋转我正在绘制的像素图,例如
Painter.translate(0, height());
Painter.rotate(-90);
(将 QPainter 逆时针旋转 90 度并将其重新显示)
对rotate() 的调用似乎对任何绘制的文本禁用抗锯齿 - 文本以正确的旋转方式绘制,但没有抗锯齿。其他事情似乎不受影响 - 例如。 drawLine() 仍然画出很好的抗锯齿线。
知道我做错了什么吗?
编辑:不出所料,将文本添加到路径然后填充该路径会给我抗锯齿、旋转的文本。如果可能的话,我宁愿避开这条路线。
编辑(再次):我尝试在我正在使用的字体上使用QFont::setStyleStrategy(QFont::PreferAntialias),但没有效果。然而,更多的实验表明,像 Arial 这样的基本字体在旋转时仍会产生抗锯齿文本,而我的自定义字体(对于任何感兴趣的人来说,Swiss721 BlkCn BT)不会。此外,虽然这个问题在 Windows 7 上存在,但在 Ubuntu 上运行时我没有同样的问题。 This FAQ article 似乎暗示 Qt 依靠主机操作系统来处理字体抗锯齿,那么 Windows 在处理这种特定字体(它是 TrueType,就像 Arial 一样)的呈现时可能会遇到什么样的问题?
编辑(最后一次,我保证):将字体大小增加到 16pt 或以上可以解决问题。似乎问题在于将我的特定字体渲染到 16pt 以下 - 可能与上述博客文章中提到的内容有关?:
在 Windows 2000 上,字体通常不会在一定范围内(例如 8-16 号)进行抗锯齿处理,以使文本更加清晰易读。
【问题讨论】:
-
我想我可能已经在这里回答了我自己的问题,但如果有人有任何进一步或相关的信息,我仍然会非常感兴趣。
标签: qt antialiasing qpainter