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

5

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

图片例子:

enter image description here

这个字体在assets/fonts(本地文件夹)中,并且通过FontLoader添加到main.qml中,就像其他3个字体一样。所有字体都能正确呈现,除了这一个,而且你可以在上面的截图中看到,我的系统正确读取了这个字体。我加载的所有字体都是.otf格式的,不知道这是否与我的问题有关。

期望结果:

enter image description here

我的示例QML代码如下:

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

谢谢


你能展示一段示例代码和一个使用所讨论字体的标签的示例吗? - Alex Huszagh
文本 { id: welcomeMessageTop color: "蓝色" text: "ASDFGHJKLT" font.family : fontLoaded.name font.pixelSize: 110 font.letterSpacing: -0.4 }这是屏幕截图示例的代码。 - Uros
1个回答

8

我怀疑这可能与QML中高效渲染动态可调整大小文本的默认方法有关,这种方法是通过距离场实现的。这是一种非常好的方式,可以平滑地调整光栅图形,并获得几乎类似于矢量图形的结果,但它会吞噬那些相对于字符大小不够突出的小细节。

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

此外,如果您的文本是动态的-如果它是动画的、旋转的或者其大小动态变化,那么我记得本机文本呈现看起来非常糟糕。它主要用于静态内容,但我想文本可以以更大的大小呈现到一个不可见的项目中,然后该项目可以用作着色器源,然后您可以应用动态行为并获得不可怕的结果。

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

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

问题是似乎无法根据每种字体进行微调,因此,如果您增加距离字段分辨率,则即使对于不需要它的字体,它也会占用更多内存。


谢谢!你救了我的一天。这很有帮助。 - Uros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接