QML 字体渲染不正确 - 缺少细节

Uro*_*ros 3 fonts qt qml

正如标题所说,我在使用 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 
} 
Run Code Online (Sandbox Code Playgroud)

谢谢

dte*_*ech 6

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

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

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

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

  qputenv("QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE", "64");
  qputenv("QT_DISTANCEFIELD_DEFAULT_SCALE", "16");
  qputenv("QT_DISTANCEFIELD_DEFAULT_RADIUS", "80");
Run Code Online (Sandbox Code Playgroud)

问题是似乎不可能在每个字体的基础上进行调整,因此如果您增加距离场分辨率,即使对于不需要它的字体,它最终也会消耗更多内存。