このページでは

C

Qt Quick Ultralite font_quality 例

アプリケーションでフォントの品質を制御する方法を示す。

概要

この例では、CMake および QML API を使用してアプリケーションのフォント品質を制御する方法を示します。これらの API が、最適なメモリ フットプリントでテキスト レンダリングにどのように影響するかを示します。

この例の UI には、異なるフォント品質設定でレンダリングされた複数のText アイテムがあります。

対象プラットフォーム

プロジェクト構成

CMakeプロジェクトファイル

この例には、同じ QML コードを共有する 2 つの実行可能ターゲットが含まれています。これらのターゲットは、MCU.Config.autoGenerateGlyphsターゲット・プロパティに異なる設定を使用しています:

この設定は、各フォントに生成されるグリフのセットに影響します。

どちらも、MCU.Config.defaultFontQualityターゲ ッ ト プ ロ パテ ィ を "VeryLow" に設定 し てい ます。この結果、QML API を使用して明示的に設定されていない場合、デフォルトで低品質のフォントが使用されます:

...
    MCU.Config {
        autoGenerateGlyphs: false
        defaultFontQuality: "VeryLow"
    }
...

autoGenerateGlyphs が無効:

...
        MCU.Config {
                autoGenerateGlyphs: true
                defaultFontQuality: "VeryLow"
        }
...
アプリケーションUI

アプリケーションUIはfont_quality.qml 。デフォルト品質("VeryLow "に設定されている)のlowQualityLatinFont フォントと、より高い品質のhighQualityDigits フォントです。

低品質のフォントは、font.unicodeCoverageBasicLatin ユニコード・ブロックに設定されています。

readonly property font lowQualityLatinFont: Qt.font({
    pixelSize: 30,
    unicodeCoverage: [Font.UnicodeBlock_BasicLatin]
    // quality set Font.QualityVeryLow by defualy
    // using \l MCU.Config.defaultFontQuality QmlProject property
})

一方、高品質のフォントでは、font.unicodeCoverage0 から9 までの数字と: コロン文字を含むように設定されています。

readonly property font highQualityDigits: Qt.font({
    pixelSize: 60,
    unicodeCoverage: [[0x30,0x3A]], // 0-9:
    quality: Font.QualityVeryHigh
})

次に、任意の低品質欧文テキストをレンダリングするためのテキスト項目が作成されます:

Text {
    anchors.horizontalCenter: parent.horizontalCenter
    id: lowQualityText
    font: lowQualityLatinFont
    text: "VeryLow 123"
}

もう1つは、高品質の数字をレンダリングするためのものです:

Text {
    anchors.centerIn: parent
    font: highQualityDigits
    text: "13:59"
}

一番最後に、これら二つのText アイテムのtext プロパティを異なるフォント品質で結合した結果を示すテキストがあります:

Text {
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.bottom: parent.bottom
    font: highQualityDigits
    // Glyps may be missing if \l MCU.Config.autoGenerateGlyphs is set to \c false
    text: lowQualityText.text
}

MCU.Config.autoGenerateGlyphsプロパティの値によっては、このテキスト項目でグリフが欠落している可能性があることに注意してください。詳細については、グリフの欠落を参照してください。

メモリフットプリント

フォントファミリーは、ウェイト、サイズ、イタリック体、品質などの他のフォントプロパティと組み合わせて、いわゆる「フォント構成」を一意に定義します。

font.unicodeCoverage を使用すると、MCU.Config.autoGenerateGlyphsプロパティと一緒に使用したときのメモリフットプリントとレンダリング出力に影響します。

デフォルトでは、このプロパティはON に設定され、アプリケーションで使用されるすべてのフォント構成に対して、qmlファイル内で使用されるすべての文字のグリフが生成されます。こ れは便利で、 異な る フ ォ ン ト 構成を持つText 項目のプ ロ パテ ィ 間でバ イ ンデ ィ ン グ を作成す る 前に、 すべてのグ リ フ が存在 し てい る か ど う かをチ ェ ッ ク す る 必要があ り ません。この便利さは、バイナリサイズとランタイムメモリフットプリントを増加させるという代償を伴います。

バ イ ナ リ サ イ ズ と フ ッ ト プ リ ン ト を最適化す る には、MCU.Config.autoGenerateGlyphsOFF に設定し ます。 こ れはすべてのグ リ フの自動生成を無効に し 、 必要なグ リ フのみを生成す る ためにfont.unicodeCoverage 設定に依存 し ます。こ れに よ り 、 各フ ォ ン ト 設定はfont.unicodeCoverage プ ロ パテ ィ に基づいてグ リ フ を得 る こ と にな り 、 その結果 メ モ リ フットプリントが最適化 さ れます。こ れは単純に聞こえますが、 すべての フ ォ ン ト 構成が必要なグ リ フ をすべて含む よ う にす る には、 注意深 く アプ リ ケーシ ョ ン を設計す る 必要があ り ます。

注記: MCU.Config.autoGenerateGlyphsOFF に設定されているときにfont.unicodeCoverage が適切な値に設定されていない場合、テキスト項目は、欠落しているグリフのプレースホルダボックスでレンダリングされます。

グリフの欠落

MCU.Config.autoGenerateGlyphsを OFF に設定し、各フォント構成にfont.unicodeCoverage を指定すると、最適なバイナリサイズと低いメモリフットプリントが得られますが、アプリケーションを慎重に設計する必要があります。

低品質のテキストが高品質のものに割り当てられているQMLコードを見てみましょう:

Text {
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.bottom: parent.bottom
    font: highQualityDigits
    // Glyps may be missing if \l MCU.Config.autoGenerateGlyphs is set to \c false
    text: lowQualityText.text
}

これは、MCU.Config.autoGenerateGlyphsが ON に設定されている場合はまったく問題ありませんが、自動生成がOFF に設定されているテキストをレンダリングする際にグリフが欠落してしまいます。

先の画像で、highQualityDigits フォントは、font.unicodeCoverage が指定されたキャラクタ(0-9: )のグリフしか含んでいないことがわかります。lowQualityText のレ ン ダ リ ン グに必要なグ リ フ は、 こ の フ ォ ン ト 設定では生成 さ れません。

ファイル

font.qualityMCU.Config.autoGenerateGlyphsMCU.config.defaultFontQualityも参照してください

特定の Qt ライセンスの下で利用可能です。
詳細を確認してください。