1. 程式人生 > >嵌入式Qt-4.8.6顯示中文並且改變字體大小和應用自己制作的字體庫

嵌入式Qt-4.8.6顯示中文並且改變字體大小和應用自己制作的字體庫

number BE string 直接 HA 字體庫 tgui AI 但是

問題:
QT4.8.6在移植到開發板上的時候,中文支持是必不可少的,如何讓QT支持中文,如何制作QT支持的字體文件,如何使QT UI編輯器中的字號與開發板中的字號一致。
詳解:
1>如何讓QT支持中文
  QT程序中指明的字體和字號在/opt/qt-4.8.6/lib/fonts目錄下沒有對應的字庫文件時,QT會選擇某一個存在的字庫文件來顯示;那麽,如果你的系統中只有需要一種字體和字號,那麽則可以將fonts目錄下不需要的字庫文件全部刪掉,只保留這個需要的字體文件即可。
上面是一種很方便的做法,無論程序中設置的字體和字號是怎樣的,它始終都會按fonts目錄下的這個唯一的字庫文件格式來顯示。但是,很多時候,我們需要多種字體和字號並存,那麽下面將介紹如何添加wenquanyi 12 13 15 16 四種字號粗體和細體共8個字庫文件,然後通過QFont來設置它們,訪問對應的字庫文件。

首先,下載font_wenquanyi字體,字體有ttf、bdf、qpf等格式,我們這裏下載的是qpf格式,如果是其它格式,則需要進行轉換。我的資源可以提供下載。
然後將下載的字庫文件復制到開發板的/opt/qt-4.8.6/lib/fonts目錄下,如下圖
技術分享圖片

以wenquanyi_120_75為例:wenquanyi是字體,120表示是15號字體,50表示細體,75表示粗體,在你的Qt程序main.c開頭加上下面這個代碼,然後編譯運行,就可以看到原來的中文字符就會顯示。

#include <QtGui/QApplication>
#include <QTextCodec> 
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
this->setFont(QFont("wenquanyi", 12, QFont::Bold));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2>如何制作QT支持的字體文件
下面將介紹如何制作QPF文件。
QT有一個工具:makeqpf,是專門用來轉換qpf文件的,但這個程序只能在嵌入式環境下運行,所以需要編譯X86版的QT4.8.6。
解壓qt-everywhere-opensource-src-4.8.6.tar.gz,並將其復制兩份,分別命名為:Qt-4.8.6-Pc, QtEmbedded-4.8.6(編譯x86是為了得到makeqpf,編譯pc是為了得到qvfb,arm版的之前編譯了,這裏就不用了)
?
2.1 編譯PC版
cd /home/yangtq/qtcretor/Qt-4.8.6-Pc/qt-everywhere-opensource-src-4.8.6/

./configure -prefix /usr/local/Trolltech/Qt-4.8.6-Pc -opensource -confirm-license
make
make install
然後進入源碼
cd /home/yangtq/qtcretor/Qt-4.8.6-Pc/qt-everywhere-opensource-src-4.8.6/tools/qvfb/
make
就會qt-everywhere-opensource-src-4.8.6/bin/生成qvfb

2.2 編譯X86版
cd /home/yangtq/qtcretor/QtEmbedded-4.8.6/qt-everywhere-opensource-src-4.8.6/
./configure -prefix /usr/local/Trolltech/QtEmbedded-4.8.6 -opensource -confirm-license -embedded x86 -qt-gfx-qvfb(這個命令可以使應用程序在qvfb裏運行,節省開發板) -qt-kbd-qvfb -qt-mouse-qvfb -make tools
make
make install
安裝目錄在/usr/local/Trolltech/QtEmbedded-4.8.6/
將上一步中編譯好的qvfb復制到/usr/local/Trolltech/QtEmbedded-4.8.6/bin中。
cp /home/yangtq/qtcretor/Qt-4.8.6-Pc/qt-everywhere-opensource-src-4.8.6/bin/qvfb /usr/local/Trolltech/QtEmbedded-4.8.6/bin

2.3 安裝完成後,在下面的目錄裏就可以找到它們
cd /usr/local/Trolltech/QtEmbedded-4.8.6/bin
準備要轉換的字體文件,這裏我們是下載的wqy-zenhei.ttf(我的資源也提供下載-wqy-zenhei.ttc)。
將wqy-zenhei.ttc字體文件拷貝到/usr/local/Trolltech/QtEmbedded-4.8.6/lib/fonts中,這樣是為了在makeqpf中找到它
啟動qvfb,並在qvfb裏運行makeqpf軟件
cd /usr/local/Trolltech/QtEmbedded-4.8.6/bin
./qvfb -width 1024 -height 800 &
./makeqpf -qws
技術分享圖片
技術分享圖片
技術分享圖片
註意事項
1).選擇要轉換的字體,就是剛才復制到/usr/local/Trolltech/QtEmbedded-4.8.6/lib/fonts/wqy-zenhei.ttc
2)輸出路徑:必須是你打開qvfb那個用戶可以可讀可寫的目錄權限
3)最後點擊下面的Generate Pre-Rendered Font就會生成你需要的字庫
技術分享圖片
  為什麽是qpf2,這得說明一下,qpf是qt2和qt3用的,後來qt4改成了qpf2,而且我們可以看到,字號16的,直接就是12,不再是120了,下面就來看看使用吧,和上面的還是有一點點區別的。
還是向上面一樣設置,假設我要顯示24號的字體:
QFont font;
font.setPointSize(160); 這裏是設成24嗎,設置後發現很小,只有當設成80的時候,才夠24的大小,看了幫助文檔後,發現原來 setPixelSize 才是設置字號的,改成 font.setPixelSize(24); 就可以了。(pointSize是一個相對值,和DPI相關;一般Windows上的DPI值是96,而embedded Linux的DPI值一般是72,所以字體會顯得小了很多。所以應該用QFont::setPixelSize)。
font.setFamily((“wenquanyi”));//這個Family怎麽設,是文件名嗎,不是,要在這裏看
技術分享圖片
font.setFamily((” WenQuanYi Zen Hei”));//註意空格

3>如何使QT UI編輯器中的字號與開發板中的字號一致。
當我們UI的編輯器的設置的字號和大小與很多種,而我們要做的是,根據上面的方法生成你的界面裏面所有需要的字庫文件,然後復制到開發板的/opt/qt-4.8.6/lib/fonts/目錄下,Qt程序會根據相應的字體庫去找,而不需要在代碼裏面專門設置一個QFont,因為那樣只能用到一個。下面這段就可以去掉

#include <QtGui/QApplication>
#include <QTextCodec> 
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
this->setFont(QFont("wenquanyi", 12, QFont::Bold));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4>延伸QT直接支持TTF的字體文件。
  QT直接支持TTF的字體文件,我們直接復制幾個ttf文件,至/opt/qt-4.8.6/lib/fonts/目錄下,將qpf的文件刪除
技術分享圖片
 重新在開發板上運行,發現幾種字體和字號都能支持,看來系統中有多種字號,用ttf文件還是蠻方便的。
有人說,ttf文件很大,比較費flash,QPF是點陣字庫文件,占用flash較小,而且訪問速度比ttf快。目前,通過目測暫時分辯不出快慢,但TTF文件只有10M左右,轉換出來的qpf文件加起來一共有一百來兆。比ttf費flash多了,不知是否是設置的原因。

註:
如果設置之後沒有效果重啟開發板(一定要重新啟動,重新啟動程序是看不出效果的,我就是在這兒被弄了很久),啟動程序,現在開發板上應該有效果了吧,哈哈。由於資源太大不能上傳資源,只能提供百度雲盤下載了
https://pan.baidu.com/s/1geZnNdp
引用:
http://www.cnblogs.com/liu_xf/archive/2011/07/05/2098144.html
http://blog.csdn.net/walker_tok/article/details/7699677

https://blog.csdn.net/u014213012/article/details/53352645

嵌入式Qt-4.8.6顯示中文並且改變字體大小和應用自己制作的字體庫