【问题标题】:QML font rendering incorrectly - missing fine detailsQML 字体渲染不正确 - 缺少细节
【发布时间】:2018-10-12 00:04:28
【问题描述】:

正如标题所说,我在使用 macOS 的 QML 项目中遇到字体渲染问题。

图片示例

字体在 assets/fonts (本地文件夹)中,它通过 FontLoader 添加到 main.qml 中,就像其他 3 种字体一样。除了这个之外的所有字体都正确渲染,正如您在上面的屏幕截图中看到的,我的系统正确读取字体。我加载的所有字体都是 .otf,我不知道这是否与我的问题有关。

预期结果:

我的示例 QML 代码是:

Text { 
    id: welcomeMessageTop 
    color: "blue" 
    text: "ASDFGHJKLT" 
    font.family : 
    fontLoaded.name 
    font.pixelSize: 110 
    font.letterSpacing: -0.4 
} 

谢谢

【问题讨论】:

  • 你能展示示例代码和带有问题字体的标签示例吗?
  • Text { id: welcomeMessageTop color: "blue" text: "ASDFGHJKLT" font.family : fontLoaded.name font.pixelSize: 110 font.letterSpacing: -0.4 } 是示例中的代码截图。

标签: qt fonts qml


【解决方案1】:

我怀疑这可能与在 QML 中高效渲染动态可调整大小文本的默认方法有关,即通过距离字段。这是平滑调整光栅图形大小并获得几乎类似于矢量图形的结果的好方法,但它确实会吃掉相对于字符大小不够突出的小细节。

您应该尝试为Text 元素设置renderType: Text.NativeRendering,看看是否有帮助。

此外,如果您的文本是动态的,IIRC 原生文本渲染看起来很糟糕——如果它是动画的、旋转的或其大小动态变化的。它对静态的东西最有用,但我想文本可以以更大的尺寸呈现给不可见的项目,并且该项目可以用作着色器源,然后您可以应用动态行为并获得不是 可怕

如果您要调整文本大小或旋转文本,请注意还有一些环境变量可以修改以调整距离场的生成并获得更好的结果:

  qputenv("QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE", "64");
  qputenv("QT_DISTANCEFIELD_DEFAULT_SCALE", "16");
  qputenv("QT_DISTANCEFIELD_DEFAULT_RADIUS", "80");

这样做的问题是似乎无法针对每种字体进行调整,因此如果您增加距离场分辨率,即使对于不需要它的字体,它最终也会占用更多内存.

【讨论】:

  • 谢谢!你拯救了我的一天。这有帮助。
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2013-02-09
相关资源
最近更新 更多