qt4.7 字体字号设设置;中文乱码,
如果想用otf字體,要加上如下的話:
QFontDatabase::addApplicationFont("MYoungHKS-Medium.otf");
font.setFamily("MYoungHKS");
前提是MYoungHKS-Medium.otf這個字體文件放到fonts那個目錄了。
以下轉:http://www.cnblogs.com/liu_xf/archive/2011/07/05/2098144.html
摘要:
?????? QT4.7.0在移植到開發板上的時候,中文支持是必不可少的,如何讓QT支持中文,如何制作QT支持的字體文件,如何使QT UI編輯器中的字號與開發板中的字號一致。作者通過實驗進行了一一驗證。
介紹:
?1、初體驗:
?QT程序中指明的字體和字號在/fonts目錄下沒有對應的字庫文件時,QT會選擇某一個存在的字庫文件來顯示;那么,如果你的系統中只有需要一種字體和字號,那么則可以將fonts目錄下不需要的字庫文件全部刪掉,只保留這個需要的字體文件即可。
? ? 上面是一種很方便的做法,無論程序中設置的字體和字號是怎樣的,它始終都會按fonts目錄下的這個唯一的字庫文件格式來顯示。但是,很多時候,我們需要多種字體和字號并存,那么下面將介紹如何添加wenquanyi 12 13 15 16 四種字號粗體和細體共8個字庫文件,然后通過QFont來設置它們,訪問對應的字庫文件。
? ? 首先,下載font_wenquanyi字體,字體有ttf、bdf、qpf等格式,我們這里下載的是qpf格式,如果是其它格式,則需要進行轉換。
? ? 然后將下載的字庫文件復制到開發板的/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts目錄下,如下圖:
以wenquanyi_150_50為例:wenquanyi是字體,150表示是15號字體,50表示細體,75表示粗體。
qt中程序如下:
?| #include <QtGui/QApplication> #include <QTextCodec> #include "hmi_desktop.h" intmain(intargc, 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(); ????returna.exec(); } |
在開發板上運行,怎么樣,字體是不是變了。高興吧,得意吧!
好了,別得意忘了形,其實這僅僅只是一個開始。試想,如果你要顯示32或者是48字號的字體,又或者你要顯示其它字體,而網上又下載不到,怎么辦?
2、來點真槍實料的
下面將介紹如何制作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 |
分別輸出16、24、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")); |
//有空格的,不要丟了
其它的設置就一樣了,
運行一下,字是不是變大了。
3、解決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/
總結
以上是生活随笔為你收集整理的qt4.7 字体字号设设置;中文乱码,的全部內容,希望文章能夠幫你解決所遇到的問題。