我使用QPainter::setRenderHint(QPainter::Antialiasing, true)
来告诉Qt,我希望它能够抗锯齿我所做的任何绘图(在这种情况下,使用drawText()
绘制的文本)。QPainter :: rotate禁用绘制文本的抗锯齿
这工作正常,文本看起来不错,直到我想旋转我正在绘制的像素图,
Painter.translate(0, height());
Painter.rotate(-90);
(以90度逆时针旋转的QPainter并把它放回视图)
到rotate()
调用似乎禁用抗锯齿用于绘制的任何文本 - 文本是在正确的旋转,但没有抗锯齿绘制。其他东西似乎未受影响 - 例如drawLine()
仍然绘制一条很好的抗锯齿线。
任何想法我做错了什么?
编辑:不出所料,将文本添加到路径,然后填充该路径给我antialiased,旋转文本。如果可能的话,我宁愿避免这条路线。
编辑(再次):我试过在我使用的字体上使用QFont::setStyleStrategy(QFont::PreferAntialias)
,没有任何效果。但是,一些更多的实验表明,像Arial这样的基本字体在旋转时仍然会产生反锯齿文本,而我的自定义字体(任何感兴趣的人都可以使用Swiss721 BlkCn BT)不会。此外,虽然Windows 7上存在此问题,但在Ubuntu上运行时,我没有遇到同样的问题。 This FAQ article似乎暗示Qt会向主机操作系统寻找字体抗锯齿处理,所以Windows在处理这种特定字体(这是一种TrueType,就像Arial)的渲染时可能会遇到什么样的问题?编辑(上次,我保证):将字体大小提高到16pt或更高可以消除问题。看起来问题在于将我的特定字体呈现在16pt以下 - 可能与上述博客文章中提到的有关:
在Windows 2000上,字体通常在特定范围内不会反锯齿大小8-16),使文本更清晰可读。
我想我可能在这里回答了我自己的问题,但如果有人有任何进一步的或相关的信息,我仍然会很感兴趣。 – sjwarner