11

1 つのファミリ (エクストラ ライト、ライト、レギュラー、セミボールド、ボールド、ブラック) 内に複数のフォント ウェイトを持つフォントがあります。この例では、無料の Google Webfont Source Sans Pro を使用していますが、複数のウェイトを持つフォント (Mac OS 10.8 のシステム フォントである Avenir Next など) で同じ問題が発生しました。Qt スタイルシートで、指定した場合:

QLabel
{
    font-family: Source Sans Pro;
    font-size:   24px;
}

フォントの「通常」スタイルを取得します。私が指定した場合:

QLabel
{
    font-family: Source Sans Pro;
    font-weight: bold;
    font-size:   24px;
}

フォントの太字バージョンを取得します。レギュラーまたはボールド以外の組み合わせが思い浮かびません。font-family に直接太さを入れてみました (例: font-family: Source Sans Pro Light; )、font-weight: 指定子で Light や Semibold などを使用してみました、同等の数値を使用してみました ( Qt のドキュメントによると、CSS の x00 番号ではなく、0 から 99 までの値であると想定されています)。何も機能しません。

編集: font-weight プロパティの 0 から 999 までの数値をサブする簡単なプログラムを作成してみました。興味深いことに、0 から 399 までの値を入力すると「ライト」が得られました。400 から 407 で「レギュラー」、408 から 599 で再びライト、600 以上でセミボールドになりました。これは非常に奇妙に思えます。数値を使用すると、少なくとも「ライト」と「セミボールド」にアクセスできるからです。「エクストラ ライト」または「ブラック」ウェイトを取得する方法がまだ見つかりません。

私の唯一の質問は、これはカスタム コードに頼らない限り不可能なのでしょうか? 次のように QFont を作成することで、必要な正確なフォントを取得できます。

QFontDatabase db;
QFont = db.font("Source Sans Pro", "Semibold", 24 );

しかし、明らかにこれは、スタイルシートを使用できないことを意味します (さらに悪いことに、独自のスタイルシート パーサーを作成するか、既存の Qt パーサーをラップする必要があります)。これがスタイルシートでは不可能だとは少し信じがたいようです。マルチウェイトフォントはQtでサポートされていませんか?

4

1 に答える 1

8

最後にQtソースを調べて、答えを見つけたと思います。要するに、いいえ、それは不可能です。または少なくとも、それはフォントに依存し、おそらくプラットフォームにも依存します(私はMac OSXとQt4.8.4で作業しています)。

QFontsには、両方のフォントの「重み」(QFont :: setWeight()で設定)があり、0〜99の数値です。また、QFont :: setStyleName()によって設定される「スタイル名」もあります。スタイルシートでfont-weightを使用して重みを設定することはできますが、styleNameを設定することはできません(qcssparserのソースを調べて確認しました)。フォントスタイルのパラメータがありますが、これは通常、斜体、または斜体の設定にのみ使用できます。つまり、setStyleName()ではなくQFont :: setStyle()を呼び出します。

少なくとも私の場合、フォントの特定の太さにアクセスする唯一の方法は、「スタイル名」を使用して、「エクストラライト」のような特定の文字列を付けることです。どうやら、Qtは、0〜99の重み数とスタイル名の間で変換するために、内部(おそらくプラットフォーム固有の)魔法を実行しているようですが、うまく機能していないようです。Qtソースに行き詰まりすぎて、このマッピングがどこで起こっているのかを正確に把握できませんでした。

奇妙さを増すために、QFont :: setWeightは0〜99の数値を取りますが(前述のとおり)、スタイルシートのfont-weightプロパティは100〜800の数値を取り、それを8で割って、setWeightを呼び出します。これは、CSSの重みの番号付けシステムにより厳密に一致させるためだと思います。

今、私はこれを回避するためにどのようなハックをするのかを理解する必要があります。font-style-nameのようなものをqcssparserに簡単に追加できますが、Qtソースにパッチを適用したくないので、おそらくアプリケーションレベルで何かを行います。

于 2013-02-16T00:13:30.150 に答える