QML not using Thin font weight

2019-07-25 11:51发布

I have a QML app using the freely-available Encode Sans font, which comes in 9 weights that match Qt 5.6's font weights.

I have added all .ttf to my project, and am using a FontLoader to load them. Everything works perfectly, except for the Thin weight of the font.

In addition to the code below I have tried providing a unique id on the FontLoader for Thin, to ensure that the family name is the same (it is). How can I debug this problem and get Thin working?

Screenshot of all weights being used. The Thin weight is listed first, and shows the same result as the Normal weight. All other weights vary as expected and look correct.

### main.qml
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-Thin.ttf" }
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-ExtraLight.ttf" }
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-Light.ttf" }
FontLoader { id:mainFont; source:"qrc:/fonts/encodesans/EncodeSans-Regular.ttf" }
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-Medium.ttf" }
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-SemiBold.ttf" }
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-Bold.ttf" }
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-ExtraBold.ttf" }
FontLoader { source:"qrc:/fonts/encodesans/EncodeSans-Black.ttf" }

Column {
  TextLine { weight:"Thin"       }
  TextLine { weight:"ExtraLight" }
  TextLine { weight:"Light"      }
  TextLine { weight:"Normal"     }
  TextLine { weight:"Medium"     }
  TextLine { weight:"DemiBold"   }
  TextLine { weight:"Bold"       }
  TextLine { weight:"ExtraBold"  }
  TextLine { weight:"Black"      }
}
### TextLine.qml
import QtQuick 2.0
Text {
  property string weight

  text: "1 2 3 4 font.weight: Font."+weight
  color:"white"
  font {
    weight: Font[weight]
    family: mainFont.name
    pixelSize: 36
  }
}

Using Qt 5.6 on Ubuntu, if it matters.

标签: qt fonts qml
1条回答
够拽才男人
2楼-- · 2019-07-25 12:46

This is a Qt bug : [QTBUG-53196] Thin fonts do not work in Qt

One workaround you could use is using the styleName property instead wich was introduced in Qt 5.6 . The disadvantage of this method is that if you have some embedded bold in your text (with html or rich text), it won't work (if I understand this bug correctly).

You can use it like this :

### TextLine.qml
import QtQuick 2.0
Text {
  property string weight

  text: "1 2 3 4 font.weight: Font."+weight
  color:"white"
  font {
    styleName: weight
    family: mainFont.name
    pixelSize: 36
  }
}
查看更多
登录 后发表回答