2013-02-15 30 views
9

私は、1つのファミリ内にいくつかのフォントウェイト(余分なライト、ライト、レギュラー、セミボールド、ボールド、ブラック)を持つフォントを持っています。この例では、無料のGoogle Webfont Source Sans Proを使用していますが、複数のウェイトを持つフォント(Mac OS 10.8のシステムフォントAvenir Nextなど)で同じ問題が発生しています。 Qtスタイルシートで、指定した場合:Qtスタイルシートにフォントの「通常」と「太字」以外のバージョンを指定することはできますか?

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

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

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

フォントの太字が表示されます。レギュラーやボールド以外のものを私に与えるコンビネーションは分かりません。私はfont-family:Source Sans Pro Light;などのフォントファミリーに直接重み付けしてみました。font-weight:specifierにLight、Semiboldなどを使ってみました。 Qt documentationは、CSS x00の番号付けではなく0から99の値であると言います)。何も動作しません。

EDIT:font-weightプロパティの0から999までの数字で簡単なプログラムを作成してみました。興味深いことに、私は0と399の間に何かを置くと "光"を得ることができました。400から407は私に "普通"を与え、408から599は私に光を与え、600以上は半ばを与えました。これは実際には奇妙に思えます。なぜなら、今では数字を使って少なくとも「ライト」と「セミボールド」にアクセスできるからです。私はまだ "エクストラライト"や "ブラック"ウェイトを取得する方法を見つけることができません。

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

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

をしかし、明らかに、これは私がスタイルシートを使用することはできません(またはより悪い、私は自分自身のスタイルシートパーサを書いたり、既存のQt 1をラップする必要がありますか何か)。これはスタイルシートでは不可能だと考えるのは少し難しいようです。マルチウェイトフォントはQtでサポートされていませんか?

答えて

7

最後にQtソースを辿り、答えを見つけたと思います。要するに、そうではありません。少なくとも、それはフォント、おそらくプラットホーム(私はMac OS XでQt 4.8.4で作業しています)にも依存します。

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

少なくとも私の場合、フォントの特定の重みにアクセスする唯一の方法は、「スタイル名」に「Extra Light」のような特定の文字列を付けることです。どうやら、Qtは0-99のウェイトナンバーとスタイル名の間で変換するための内部的な(おそらくプラットフォーム固有の)魔法をやっているし、うまくやっていないようです。私はQtソースであまりにも渋滞して、このマッピングが起こっていた場所を正確に把握しました。

QFont :: setWeightは0から99までの数値をとりますが、スタイルシートのfont-weightプロパティは100から800までの数値をとり、8で割りますsetWeightを呼び出します。これはCSS weight numbering systemに一層近似していると思います。

今、私はこれを回避するためにどのような種類のハックを行うかを把握するだけです。qcssparserにfont-style-nameのようなものを簡単に追加することはできますが、Qtソースにパッチを当てるのではなく、おそらくアプリケーションレベルで何かを行うでしょう。

+4

これはMac OS Xの唯一の問題であることがわかりました。おそらくQtのバグレポートを提出するべきです。 MacとLinux(どちらもQt 4.8.4を使用)で正確に同じコードを実行して同じTrueTypeフォントを選択すると、異なる結果になります。 Linux/X11バージョンはあなたが期待することをします。 – ScottG

関連する問題