自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析 Qt 字庫移植并能顯示中文 (上篇)

移動開發(fā)
本文介紹的是Qt 字庫移植并能顯示中文,需要的字體庫文件,一般是多個。具體移植那一個,看你使用的字庫是什么了,先來看內(nèi)容。

Qt 字庫移植并能顯示中文是本文介紹的內(nèi)容,先來看內(nèi)容,如何定制字庫移植字庫),需要將至少兩個文件賦值到 lib/font目錄下
   
1、fontdir 文件。這個是應(yīng)用程序?qū)ふ耶?dāng)前系統(tǒng)中最合適自己需要的字庫的索引;

2、需要的字庫文件,一般是多個。具體移植那一個,看你使用的字庫是什么了,比如我現(xiàn)在的系統(tǒng)我就是移植的wenquanyi_12pt.bdf就可以了,當(dāng)然這個比較大。你也可以用小點(diǎn)的。我的flash比較大呵呵,懶得折騰。

在程序中需要這樣設(shè)置:

  1. QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));  
  2.    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8")); 

設(shè)置使用utf-8編碼也就是unicode編碼了,這樣在tr和string的都是unicode的編碼了,根據(jù)字庫的索引就能對應(yīng)相應(yīng)的字符了。

然后設(shè)置字體:

  1. //字體設(shè)置  
  2.      QFont font("wenquanyi",12,QFont::Bold); //使用wenquanyi字體  
  3.      this->setFont(font);  
  4. //這樣就設(shè)置了字體了,中文一般使用wenquanyi字體就可以了。很好的。 

基礎(chǔ)知識介紹:

字符編碼

1、字符必須編碼后才能被計(jì)算機(jī)處理。計(jì)算機(jī)使用的缺省編碼方式就是計(jì)算機(jī)的內(nèi)碼。早期的計(jì)算機(jī)使用7位的ASCII編碼,為了處理漢字,程序員設(shè)計(jì)了用于簡體中文的GB2312和用于繁體中文的big5。在這些編碼中,中文和英文可以統(tǒng)一的處理,區(qū)分中文編碼的方法是高字節(jié)的***位為不為0。GB內(nèi)碼的存儲方式始終都是big endian,即高位在前。

2、Unicode是一種字符編碼方法,它是由國際組織設(shè)計(jì),可以容納全世界所有語言文字的編碼方案。Unicode的學(xué)名是"Universal Multiple-Octet Coded Character Set",簡稱為UCS。UCS可以看作是"Unicode Character Set"的縮寫。

Unicode與GB碼不兼容,只與ASCII兼容。

UCS規(guī)定了怎么用多個字節(jié)表示各種文字。怎樣傳輸這些編碼,是由UTF(Unicode transforation format)規(guī)范規(guī)定的。常見的UTF規(guī)范包括UTF-8(就是以8位為單元對UCS進(jìn)行編碼)、UT F-7、UTF-16。
UTF-*和Unicode是同類,就是在編碼方式上不同。首先UTF編碼后的大小是不一定,不像Unicode編碼后的大小是一樣的。

字體庫:

一般認(rèn)為,一個漢字的編碼就對應(yīng)著這樣的字形,這還是錯誤的。內(nèi)碼對于字庫來說,只是查找字形的索引。如果換成另一個編碼標(biāo)準(zhǔn)的字體,同一個字符串就會呈現(xiàn)不同的字形,也就是亂碼。
隨著GUI的發(fā)展,字庫逐漸轉(zhuǎn)向TTF.TTF字庫的編碼標(biāo)準(zhǔn)沒有UTF8的

由于工作需要把ttf字體轉(zhuǎn)換成qpf字體,牽扯到了qt的makeqpf工具的使用方法

先簡單說一下qt的字體支持

Qte可以支持以下四種形態(tài)的字體格式

  1. TrueType (TTF)、Postscript Type(PFA/PFB)、Bitmap Distribution Format fonts(BDF)、Qt Prerendered Font(QPF) 

Qt中不同字體是用Unicode來處理、轉(zhuǎn)換

因?yàn)閁nicode(UTF16或者UTF8)最適合在任何人之間傳遞信息,

至于TrueType(不知道是什么東西,先唬著?)的支援,目前Qte采用的是FreeType2 Livrary來顯示字體,可充分享受無段式anti-aliased顯示。

經(jīng)過下午的查證:Truetype是由AppleComputer公司和Microsoft公司聯(lián)合提出的一種新型數(shù)學(xué)字形描述技術(shù)。他用數(shù)學(xué)函數(shù)描述字體輪廓外形,含有字形構(gòu)造、顏色填充、數(shù)字描述函數(shù)、流程條件控制、珊格處理控制、附加提示控制等指令。TrueType采用幾何學(xué)中二次B樣條曲線及直線來描述字體的外形輪廓,其特點(diǎn)是:TrueType即可以作打印字體又可以做屏幕顯示;由于它是由指令對字形進(jìn)行描述,因此它與分辨率無關(guān),輸出時總是按照打印機(jī)的分辨率輸出。無論放大或縮小,字符總是光滑的,不會有鋸齒出現(xiàn)。但相對PostScript字體來說,其質(zhì)量要差一些,特別是在文字太小時,就表現(xiàn)得不是很清楚

簡單 一下:truetype,字體就是可以不變形放大的字體,標(biāo)準(zhǔn)的字體大約有三種。*.fon 、*.ttf 、*.ttc,你所問的就是*.ttf 、*.ttc是*.ttf的新標(biāo)準(zhǔn)。*.fon就是很久以前用的字體,dos下現(xiàn)windows還有少量,主要用在系統(tǒng)使用方面可以提高程序的執(zhí)行效率

FreeType是一個免費(fèi)的并且可以被移植的TrueType 字庫引擎,可以應(yīng)用于很多平臺!

fontdir的簡介

下面是截取qtcore中默認(rèn)的fontdir文件中的中文字庫部分

  1. #Chinese character font from http://wqy.sourceforge.net/en  
  2. wenquanyi wenquanyi_12pt.bdf BDF n 50 120 u  
  3. wenquanyi wenquanyi_13pt.bdf BDF n 50 130 u  
  4. wenquanyi wenquanyi_15pt.bdf BDF n 50 150 u  
  5. wenquanyi wenquanyi_16pt.bdf BDF n 50 160 u  
  6. wenquanyi wenquanyi_12ptb.bdf BDF n 75 120 u  
  7. wenquanyi wenquanyi_13ptb.bdf BDF n 75 130 u  
  8. wenquanyi wenquanyi_15ptb.bdf BDF n 75 150 u  
  9. wenquanyi wenquanyi_16ptb.bdf BDF n 75 160 u 

可以看到共有七列

  1. ***列:字體的名字,就是你在設(shè)置字體的時候的字體的名字  
  2. 第二列: (file)即具體的文件名字  
  3. 第三列: (renderer)字體的格式,有BDF,TTT,QPF等選擇.  
  4. 第四列: n 表示iitalic,是否為斜體  
  5. 第五列:weight, 50 = Nomal,75=Bold 
  6. 第六列: size 120表示12pt  
  7. 第七列flags 有三個選項(xiàng):s   (smooth)  
  8.                               u   (unicode順序保存)  
  9.                                
  10.                              a   (ascii 順序保存,默認(rèn)是Latin 1)。 

文件中每行都標(biāo)識一個特定的字庫,每個段的含義是:***列為name,第二列為file,第三列為renderer,相當(dāng)于字型格式,所以有 BDF,TTT,QPF等選擇。第四列n表示iitalic,表示是否為斜體字。第五列表示weight,其中50表示Normal,75表示Bold。第六列表示size,例如:120表示12pt。第七列為flags,有下面三個選擇:s=smooth(anti-aliased)u =unicode range when saving (default is Latin 1 a = ASCII range when saving(default is Latin 1))

其中屬性file,renderer(BDF,TTF,QPF)和size特別要設(shè)置對,其它屬性問題不大。還要注意如果在該目錄下有QPF的文件,系統(tǒng)只會使用QPF格式的文件,而不會讀取其它格式的文件,不管FONTDIR里面的內(nèi)容是什么。如果有多個QPF文件,應(yīng)用程序按照大小,家族,黑體和斜體的順序查找,即首先查找大小和自己一樣的字庫,大小無法區(qū)分唯一的字庫的再看對應(yīng)的家族,還是無法區(qū)分的再看是否黑體,是否斜體??梢詤⒖糚C上的字庫索引文件FONTDIR:

例如:

  1. -cclib -song -medium -r -normal -jiantizi -16 -160 -75 -75 -c -160 -gb2312 1980-0

其中,每個段的含義如下:

  1. cclib:制造商  
  2. song:字體族,此處表示“宋體”字  
  3. medium:字權(quán)重(中等),還有bold(粗體)選項(xiàng)  
  4. r:傾斜,R(Roman),I(Italic),O(Oblique)  
  5. normal:字符集寬度,此外還有condensed,narrow,double  
  6. jiantizi:附加說明(此處意義為“簡體字”)  
  7. 16:用像素衡量的寬度。  
  8. 160:點(diǎn)數(shù) 10  
  9. 75(1):水平分辨率(dpi)  
  10. 75(2):垂直分辨率(dpi)  
  11. c:間距。c:square,m:fixed width,p:variable width  
  12. 160:平均寬度(10*pixels)  
  13. gb2312.1980:注冊字符集,標(biāo)準(zhǔn)名 

小結(jié):解析 Qt 字庫移植并能顯示中文 (上篇)的內(nèi)容介紹完了,希望本文對你有所幫助,想要深入了解,請參考 解析 Qt 字庫移植并能顯示中文 (下篇)

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-30 16:08:05

Qt 字庫 QPF

2011-06-22 14:30:44

QT 多線程 線程

2011-06-17 09:19:03

Qt 4.5.1 Sqlite 移植

2011-06-29 10:46:01

Qt Eembedded Linux

2011-06-21 15:48:41

2011-06-27 10:15:22

Qt 網(wǎng)絡(luò) TCP

2011-06-24 13:08:34

Qt Qt 4.5.3 移植

2011-06-13 11:24:55

QT MPlayer 移植

2011-06-13 16:16:32

Qt 中文問題

2011-06-13 11:07:22

QT 移植

2011-07-05 18:32:52

QT 信號 機(jī)制

2011-06-23 16:24:21

Qt Embedded 交叉編譯

2011-07-01 14:14:34

Qt 事件

2011-04-07 17:27:52

Policing

2011-04-07 17:39:57

Shapping

2011-06-17 16:47:12

Qt Eclipse Windows

2011-06-17 13:18:17

Qt 文件

2011-06-09 16:47:56

Qt 嵌入式

2011-06-27 13:32:21

Qt 數(shù)據(jù)庫 QSqlQueryM

2011-06-15 18:20:20

Qt 移植 Android
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號