首页 > 解决方案 > QML FontLoader.name 混淆

问题描述

我从 Google Fonts 下载了项目文件夹中的两个 .ttf 文件:

  1. 蒙特塞拉特-ExtraLight.ttf
  2. 蒙特塞拉特-布莱克.ttf

我正确设置了 .qrc 文件以包含它们。

假设我有下一个 .qml 文件:

import QtQuick 2.7
import QtQuick.Layouts 1.2
import QtQuick.Controls.Universal 2.0

Rectangle{
        id: rectangle
        height: 500
        width: 700
          Column{
              FontLoader { id: myCustomFont1; source: "../Fonts/Montserrat/Montserrat-ExtraLight.ttf" }
              FontLoader { id: myCustomFont2; source: "../Fonts/Montserrat/Montserrat-Black.ttf" }
              Text{
                  ...
                  text: "Qt for python"
                  font.family: myCustomFont1.name
                  ...
              }
              Text{
                  ...
                  text: "Qt for c++"
                  font.family: myCustomFont2.name
                  ...
              }
          }
        
}

问题是 themyCustomFont1.name和 themyCustomFont2.name是相同的,即“蒙特塞拉特”,我没有任何解决方案来区分它们。因此,即使我指定了正确的 FontLoader-s id-s,第二个文本也将具有与第一个文本相同的 font.family。有可能以某种方式解决这个问题吗?

标签: qtfontsqmlloader

解决方案


这不是一个理想的解决方案,而是一个应该有效的解决方法。有一个名为FontForge的开源字体编辑器,您可以使用它来更改 Qt 读取的名称。打开有问题的字体文件,然后打开菜单Element->Font Info。这将打开一个对话框,左侧有多个选项卡。第一个选项卡应该是PS Names. 这应该列出几个字段,包括FontnameFamily Name。您应该能够将它们编辑为您想要的任何内容。然后关闭该对话框并用于File->Generate Fonts重新生成 .ttf 文件。


推荐阅读