QT/E中的字體

一、概述
QT/E(Qt for Embedded)使用FreeType 2字體引擎來支持字體顯示。比如TrueType(ttf),Postscript Type(PFA/PFB),Bitmap Distrubution Format fonts(BDF)等。同時QT/E自己還支持Qt Prerendered Font(QPF)字體,是一種位圖字體,不可縮放,作爲QTE的本地字體。

TrueType是由蘋果和微軟爲主開發的矢量字體技術(與之對應的是點陣字體),可以不變形的放大和縮小,文件名一般是.fon、.ttf和*.ttc,ttc是ttf的新標準,而fon是以前的老標準。目前有FreeType的字體引擎,作爲一個軟件庫,能夠幫助處理TrueType字體的顯示。

BDF字體是X窗口系統的位圖字體格式,其文件分成兩部分,第一部分是描述整體屬性的header,第二部分則是每個字型的屬性和位圖數據。

QPF字體格式僅用於QT/Embedded的不可縮放字體,屬於QTE的官方字體,可用工具makeqpf,將ttf文件生成qpf字體文件。

在Qt中直接使用TTF字體或者PFA/PFB這些矢量字體,應用程序會在顯示的時候需要將矢量信息計算成點陣形式,會佔用大量的計算能力和RAM。如果選用BDF字體,則速度非常慢,而且也需要佔用較多資源。QPF是位圖字體,不需要再顯示時計算點陣,且由於不可縮放,位圖直接拿去顯示即可,速度和資源佔用是最好的。

當QTE應用啓動時,會到$QT/lib/fonts目錄下去尋找對應的字體文件,包括QBF和TTF字體文件,爲兼容期間也會繼續讀取該目錄下的fontdir文件。在代碼中使用QFont來應用字體,如果選定字體不存在,QFont有內在的match策略,自動選擇默認字體。

二、中文字體設置
本人在做項目時,在中文實現這塊吃了不少苦頭,網上的資料雖多,但是講的透徹的沒幾個,而且好多博文只是知其然不知其所以然,所以本人走了不少彎路,現特把自己的經驗做一下總結。
1、有了中文字體庫文件,例如文泉驛字體庫(從120到360尺寸的都有),也放到相應的目錄下了,但是在應用程序中無法設置字體的大小。
2、查了很多資料才知道還得有個文件fontdir才行(罪魁禍首),於是寫了一個fontdir文件就可以了。這個fontdir文件在移植好的Qt庫下沒有,不知道什麼原因。
3、fontdir文件內容:
wenquanyi wenquanyi_120_50.qpf QPF n 50 120 u
wenquanyi wenquanyi_120_75.qpf QPF n 75 120 u
wenquanyi wenquanyi_130_50.qpf QPF n 50 130 u
wenquanyi wenquanyi_130_75.qpf QPF n 75 130 u
wenquanyi wenquanyi_140_50.qpf QPF n 50 140 u
wenquanyi wenquanyi_140_75.qpf QPF n 75 140 u
wenquanyi wenquanyi_150_50.qpf QPF n 50 150 u
wenquanyi wenquanyi_150_75.qpf QPF n 75 150 u
wenquanyi wenquanyi_160_50.qpf QPF n 50 160 u
wenquanyi wenquanyi_160_75.qpf QPF n 75 160 u
wenquanyi wenquanyi_180_50.qpf QPF n 50 180 u
wenquanyi wenquanyi_200_50.qpf QPF n 50 200 u
wenquanyi wenquanyi_220_50.qpf QPF n 50 220 u
wenquanyi wenquanyi_220_75.qpf QPF n 75 220 u
wenquanyi wenquanyi_280_50.qpf QPF n 50 280 u
wenquanyi wenquanyi_280_75.qpf QPF n 75 280 u
wenquanyi wenquanyi_360_50.qpf QPF n 50 360 u
wenquanyi wenquanyi_360_75.qpf QPF n 75 360 u
第一列:字體的名字,就是你在設置字體的時候的字體的名字
第二列: (file)即具體的文件名字
第三列: (renderer)字體的格式,有BDF,TTT,QPF等選擇。
第四列: n 表示iitalic,是否爲斜體
第五列:weight,50 = Nomal,75=Bold
第六列: size 120表示12pt
第七列flags 有三個選項:s(smooth)、u(unicode順序保存)、a(ascii 順序保存,默認是Latin 1)。
4、設置中文字體:
QFont font;
font.setPointSize(220);
font.setFamily((“wenquanyi”));
font.setBold(false);
a.setFont(font);
5、通過Qt Designer設計的佈局,包括字體的大小,會自動對應到相應的中文字體文件。

發佈了33 篇原創文章 · 獲贊 30 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章