我曾经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 上运行时我没有同样的问题。这篇 FAQ 文章似乎暗示 Qt 依靠主机操作系统来处理字体抗锯齿,那么 Windows 在处理这种特定字体(它是 TrueType,就像 Arial 一样)的呈现时可能会遇到什么样的问题?
编辑(最后一次,我保证):将字体大小增加到 16pt 或以上可以解决问题。似乎问题在于将我的特定字体渲染到 16pt 以下 - 可能与上述博客文章中提到的内容有关?:
在 Windows 2000 上,字体通常不会在一定范围内(例如 8-16 号)进行抗锯齿处理,以使文本更加清晰易读。