QT字體的設置

摘要:html

       QT4.7.0在移植到開發板上的時候,中文支持是必不可少的,如何讓QT支持中文,如何製做QT支持的字體文件,如何使QT UI編輯器中的字號與開發板中的字號一致。做者經過實驗進行了一一驗證。linux

介紹:編輯器

 1、初體驗:工具

   QT程序中指明的字體和字號在/fonts目錄下沒有對應的字庫文件時,QT會選擇某一個存在的字庫文件來顯示;那麼,若是你的系統中只有須要一種字體和字號,那麼則能夠將fonts目錄下不須要的字庫文件所有刪掉,只保留這個須要的字體文件便可。post

    上面是一種很方便的作法,不管程序中設置的字體和字號是怎樣的,它始終都會按fonts目錄下的這個惟一的字庫文件格式來顯示。可是,不少時候,咱們須要多種字體和字號並存,那麼下面將介紹如何添加wenquanyi 12 13 15 16 四種字號粗體和細體共8個字庫文件,而後經過QFont來設置它們,訪問對應的字庫文件。字體

    首先,下載font_wenquanyi字體,字體有ttf、bdf、qpf等格式,咱們這裏下載的是qpf格式,若是是其它格式,則須要進行轉換。ui

    而後將下載的字庫文件複製到開發板的/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts目錄下,以下圖:spa

以wenquanyi_150_50爲例:wenquanyi是字體,150表示是15號字體,50表示細體,75表示粗體。3d

qt中程序以下:code

#include <QtGui/QApplication>
#include <QTextCodec>
#include "hmi_desktop.h"
 
 
int  main( int  argc, char  *argv[])
{
     QApplication a(argc, argv);
     //中文支持
     QTextCodec::setCodecForLocale(QTextCodec::codecForName( "UTF-8" ));
     QTextCodec::setCodecForTr(QTextCodec::codecForName( "UTF-8" ));        //支持Tr中文
     QTextCodec::setCodecForCStrings(QTextCodec::codecForName( "UTF-8" )); //支持中文文件名顯示
     QFont font;
     font.setPointSize(160); //其實是16的字號,但設成16卻不行
     font.setFamily(( "wenquanyi" ));
     font.setBold( false );
 
     a.setFont(font);
     //--
     Hmi_desktop w;
 
     w.show();
 
     return  a.exec();
}

  在開發板上運行,怎麼樣,字體是否是變了。高興吧,得意吧!

  好了,別得意忘了形,其實這僅僅只是一個開始。試想,若是你要顯示32或者是48字號的字體,又或者你要顯示其它字體,而網上又下載不到,怎麼辦?

二、來點真槍實料的

  下面將介紹如何製做QPF文件。

  QT有一個工具:makeqpf,是專門用來轉換qpf文件的,但這個程序只能在嵌入式環境下運行,因此須要編譯X86版的QT4.7。

  解壓qt-everywhere-opensource-src-4.7.0.tar.gz,並將其複製兩份,分別命名爲:qt-4.7.0-x86,qt-4.7.0-pc(編譯x86是爲了獲得makeqpf,編譯pc是爲了獲得qvfb,arm版的以前編譯了,這裏就不用了)

cd qt-4.7.0-x86
./configure -prefix /usr/local/Trolltech/qt-4.7.0-x86 -opensource -confirm-license -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb -make tools
make
make install
 
cd qt-4.7.0-pc
./configure -prefix /usr/local/Trolltech/qt-4.7.0-pc -opensource -confirm-license
make
make install
 
#接下來安裝PC版本的qvfp
cd qt-4.7.0-pc
cd tools/qvfp
make
cp qt-4.7.0-pc/bin/qvfp /usr/local/Trolltech/qt-4.7.0-x86/bin

  安裝完成後,在下面的目錄裏就能夠找到它們

cd /usr/local/Trolltech/qt-4.7.0-x86/bin/

   準備要轉換的字體文件,可在C:\WINDOWS\Fonts 下找,或者去下載。  

       這裏咱們是下載的wqy-zenhei.ttf。

 

  將wqy-zenhei.ttf字體文件拷貝到/usr/local/Trolltech/qt-4.7.0-x86/lib/fonts中,這樣是爲了在makeqpf中找到它

  啓動qvfb,並在qvfb裏運行makeqpf軟件

./qvfb -width 800 -height 480 &
./makeqpf -qws

  

 

  分別輸出1六、2四、32等字號,這樣在輸出路徑指定的目錄裏就能看到這些文件了(注意:若是是選擇根目錄,則看不到文件,要在終端裏才能看到)

  爲何是qpf2,細緻的朋友可能看出來了,這得說明一下,qpf是qt2和qt3用的,後來qt4改爲了qpf2,並且咱們能夠看到,字號16的,直接就是16,再也不是160了,下面就來看看使用吧,和上面的仍是有一點點區別的。

  仍是向上面同樣設置,假設我要顯示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"));

//有空格的,不要丟了

其它的設置就同樣了,

運行一下,字是否是變大了。

 

三、解決setPointSize字過小的問題

   在UI編輯器裏,並無setPixelSize的設置,只有setPointSize。若是要在開發板上顯示正常的字號,必需要將PointSize設得很大,那麼在計算機上的字就變得超大,沒法經過ui編輯器達到所見即所得的效果。前面咱們說過,這是由於顯示器DPI不一樣的緣由。在QT應用中,可經過環境變量來設置DPI,以下:

export QWS_DISPLAY="LinuxFB:mmWidth95:0" 
export QWS_SIZE="640x480"

  從新啓動QT應用程序時,發現字號和計算機上的字號相差不那麼大了,95的值並非很準確,須要跟據顯示器來調整,輸入合適的DPI值,(我用羣創AT056TN53的屏,DPI值設置爲180比較合適)

 

4、進一步的嘗試

  QT直接支持TTF的字體文件,咱們直接複製幾個ttf文件,至/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts目錄下,將qpf的文件刪除

  從新在開發板上運行,發現幾種字體和字號都能支持,看來系統中有多種字號,用ttf文件仍是蠻方便的。

 

 

結語:

     有人說,ttf文件很大,比較費flash,QPF是點陣字庫文件,佔用flash較小,並且訪問速度比ttf快。目前,經過目測暫時分辯不出快慢,但TTF文件只有10M左右,轉換出來的qpf文件加起來一共有一百來兆。比ttf費flash多了,不知是不是設置的緣由。

 

參考資料:

如何構建Qt4.7.0嵌入式開發環境  http://blog.163.com/allegro_tyc/blog/static/33743768201101311239471/

QT中QPF字庫的製做與旋轉字體的實現 http://www.360doc.com/content/10/0308/00/79031_17944837.shtml

Qt 字體大小的計算  http://losemyheaven.blog.163.com/blog/static/17071980920111283934557/

 
http://www.cnblogs.com/liu_xf/archive/2011/07/05/2098144.html
相關文章
相關標籤/搜索