Eri*_*las 17 windows macos fonts qt
我想对一些自定义小部件渲染进行可重复测试.为了做到这一点,我将它们绘制到QImage上并将结果保存为PNG.与MacOSX相比,Windows上的输出确实不同.
我照顾:
如何确保所有平台上的渲染完全相同,以便我的测试运行是可重现的?换句话说,是否可以强制QT5在所有平台上使用相同的字体引擎(例如freetype)?
**
我把问题钉在一个简单的渲染测试程序上.所以代码看起来像:
QFontDatabase fontDb;
fontDb.addApplicationFont(".../fonts/Vera.ttf");
QImage result(width, height, QImage::Format_RGB32);
QPainter painter(&result);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::TextAntialiasing);
QBrush background(QColor(205, 205, 205));
painter.fillRect(0, 0, 800, 600, background);
QFont font = fontDb.font("Bitstream Vera Sans", "Normal", 10);
painter.setFont(font);
painter.setPen(QColor(0, 0, 0));
painter.drawText(10, 10, "ABCD abcd 01234567");
Run Code Online (Sandbox Code Playgroud)
比特流Vera字体可以在fontsquirel.com上下载.
在MacOSX(左)和Win32(右)上查看结果,这些结果非常不同:

以下是N1ghtLight的回答和评论,在阅读了他建议的链接后,我更改了代码以获取字体:
QFont font = fontDb_->font(("Bitstream Vera Sans", "Normal", -1);
qreal screenDPI = QApplication::primaryScreen()->physicalDotsPerInch();
qreal RENDER_DPI = 72;
int pixelSize = (int)((qreal)10 * screenDPI / RENDER_DPI);
font.setPixelSize(pixelSize);
Run Code Online (Sandbox Code Playgroud)
这似乎主要解决了大小不同的字体问题.至少在MacOSX上,字体现在正好是10像素高.在Windows上虽然字体变得更薄,但也更小.我仍然迷茫和困惑......
这是新结果(左侧MacOSX,右侧Windows).白色刻度表示真正的10像素大小.

下面通过G_G回答我改编了代码(关于Linux?移动平台怎么样?这变得非常复杂......).现在,Windows和MacOSX上的输出中的字体都是10像素,但仍然非常不同(左边是MacOSX,右边是Windows).

谢谢.
发生这种情况是因为您设置了以像素为单位的大小。您需要使用 setPointSize() 代替。
来自 Qt 5 文档:
void QFont::setPixelSize(int pixelSize)
Run Code Online (Sandbox Code Playgroud)
将字体大小设置为pixelSize 像素。使用此函数使字体设备相关。使用 setPointSize() 或 setPointSizeF() 以与设备无关的方式设置字体大小。
另外,有关更多信息,您可以查看这篇文章。出现这种差异是因为不同操作系统上的显示密度不同。我自己在一个 OS X、Windows 跨平台项目中遇到过这样的问题。
[更新] 经过我的额外研究,我发现 Qt 字体的当前行为只是一个错误。这就是为什么上面的解决方案不起作用(它适用于 Qt 4) 这里描述了解决此问题的不同解决方法。祝你好运!
| 归档时间: |
|
| 查看次数: |
7804 次 |
| 最近记录: |