2013-02-15 22 views
9

我有了一個家庭內的幾個字體粗細的字體(額外的光線,光,定期,semibold,大膽,黑色)。在這個例子中,我使用的是免費的Google Webfont Source Sans Pro,但是我對任何具有多個權重的字體(例如Avenir Next,Mac OS 10.8中的系統字體)都有同樣的問題。在Qt樣式表中,如果我指定:是否可以在Qt樣式表中指定字體的「常規」和「粗體」版本?

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

我得到字體的「Regular」樣式。如果我指定:

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

我得到了字體的粗體版本。我找不出任何組合給我以外的其他任何東西,比如普通或粗體。我試着將字體直接放在字體家族中(例如,font-family:Source Sans Pro Light;),我嘗試在字體重量:說明符中使用Light,Semibold等,我也嘗試使用數字等值( Qt documentation表示它們應該是從0到99的值,而不是CSS x00編號)。什麼都沒有

編輯:我只是嘗試了font-weight屬性0和999之間的數字寫一個快速程序子。有趣的是,如果我在0和399之間插入任何東西,我就可以獲得「光明」.400到407給了我「定期」,408到599再次給我亮,然後600或更高給了我半分。這看起來很奇怪,因爲現在使用的數字我至少可以訪問「light」和「semibold」。我仍然無法找到任何方法來獲得「額外光」或「黑色」權重。

我唯一的問題是,這只是不可能不訴諸自定義代碼?我可以通過創建一個QFont得到確切的字體我想如下:

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

但很明顯,這意味着我不能使用樣式表(或更糟的是,我必須寫我自己的樣式表分析器或者包裝現有的Qt一個或者其他的東西)。這似乎有點難以置信,這對於樣式表來說是不可能的。 Qt支持多重字體嗎?

回答

7

通過了Qt源最後觸輪,我想我找到了答案。總之,不,它不可能。至少,它取決於字體,甚至是平臺(我正在使用Qt 4.8.4在Mac OS X上工作)。

QFonts兼得字體 「權重」(由QFont設置:: setWeight()),它是從0到99的數。他們也有一個由QFont :: setStyleName()設置的「樣式名稱」。您可以在樣式表中使用font-weight來設置權重,但不能設置styleName(我通過查看qcssparser的來源來確認)。有一個字體樣式的參數,但只能用於設置正常,斜體或傾斜......也就是說,它調用QFont :: setStyle(),而不是setStyleName()。

至少在我的情況下,訪問某些字體的權重的唯一方法是通過「樣式名稱」,給它一個特定的字符串,如「額外的光」。顯然,Qt正在做一些內部的(也許是特定於平臺的)魔術來在0-99的權重數字和風格名稱之間進行轉換,而且它似乎並沒有做好。我在Qt資源中陷於困境,無法確切瞭解這種映射的發生方式。要添加到奇怪的地方,QFont :: setWeight需要一個介於0-99之間的數字(如前所述),但樣式表中的font-weight屬性需要一個介於100和800之間的數字,然後除以8並調用setWeight。我想這是更接近匹配CSS weight numbering system

現在我只需要弄清楚什麼樣的黑客,我打算做來解決這個問題。我可以輕鬆地將類似font-style-name的內容添加到qcssparser中,但我寧願不修補Qt源代碼,所以我可能會在應用程序級別上做些什麼。

+4

原來,這只是Mac OS X中的一個問題。我應該提交一份Qt錯誤報告。如果您運行完全相同的代碼以在Mac和Linux上選擇完全相同的TrueType字體(均使用Qt 4.8.4),則會得到不同的結果。 Linux/X11版本可以滿足你的期望。 – ScottG 2013-02-16 04:17:01

相關問題