日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

qt4.7 字体字号设设置;中文乱码,

發(fā)布時(shí)間:2024/9/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt4.7 字体字号设设置;中文乱码, 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果想用otf字體,要加上如下的話(huà):

QFontDatabase::addApplicationFont("MYoungHKS-Medium.otf");
font.setFamily("MYoungHKS");

前提是MYoungHKS-Medium.otf這個(gè)字體文件放到fonts那個(gè)目錄了。



以下轉(zhuǎn):http://www.cnblogs.com/liu_xf/archive/2011/07/05/2098144.html


摘要:

?????? QT4.7.0在移植到開(kāi)發(fā)板上的時(shí)候,中文支持是必不可少的,如何讓QT支持中文,如何制作QT支持的字體文件,如何使QT UI編輯器中的字號(hào)與開(kāi)發(fā)板中的字號(hào)一致。作者通過(guò)實(shí)驗(yàn)進(jìn)行了一一驗(yàn)證。

介紹:

?1、初體驗(yàn):

  ?QT程序中指明的字體和字號(hào)在/fonts目錄下沒(méi)有對(duì)應(yīng)的字庫(kù)文件時(shí),QT會(huì)選擇某一個(gè)存在的字庫(kù)文件來(lái)顯示;那么,如果你的系統(tǒng)中只有需要一種字體和字號(hào),那么則可以將fonts目錄下不需要的字庫(kù)文件全部刪掉,只保留這個(gè)需要的字體文件即可。

? ? 上面是一種很方便的做法,無(wú)論程序中設(shè)置的字體和字號(hào)是怎樣的,它始終都會(huì)按fonts目錄下的這個(gè)唯一的字庫(kù)文件格式來(lái)顯示。但是,很多時(shí)候,我們需要多種字體和字號(hào)并存,那么下面將介紹如何添加wenquanyi 12 13 15 16 四種字號(hào)粗體和細(xì)體共8個(gè)字庫(kù)文件,然后通過(guò)QFont來(lái)設(shè)置它們,訪問(wèn)對(duì)應(yīng)的字庫(kù)文件。

? ? 首先,下載font_wenquanyi字體,字體有ttf、bdf、qpf等格式,我們這里下載的是qpf格式,如果是其它格式,則需要進(jìn)行轉(zhuǎn)換。

? ? 然后將下載的字庫(kù)文件復(fù)制到開(kāi)發(fā)板的/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts目錄下,如下圖:

以wenquanyi_150_50為例:wenquanyi是字體,150表示是15號(hào)字體,50表示細(xì)體,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);//實(shí)際上是16的字號(hào),但設(shè)成16卻不行 ????font.setFamily(("wenquanyi")); ????font.setBold(false); ????a.setFont(font); ????//-- ????Hmi_desktop w; ????w.show(); ????returna.exec(); }

  在開(kāi)發(fā)板上運(yùn)行,怎么樣,字體是不是變了。高興吧,得意吧!

  好了,別得意忘了形,其實(shí)這僅僅只是一個(gè)開(kāi)始。試想,如果你要顯示32或者是48字號(hào)的字體,又或者你要顯示其它字體,而網(wǎng)上又下載不到,怎么辦?

2、來(lái)點(diǎn)真槍實(shí)料的

  下面將介紹如何制作QPF文件。

  QT有一個(gè)工具:makeqpf,是專(zhuān)門(mén)用來(lái)轉(zhuǎn)換qpf文件的,但這個(gè)程序只能在嵌入式環(huán)境下運(yùn)行,所以需要編譯X86版的QT4.7。

  解壓qt-everywhere-opensource-src-4.7.0.tar.gz,并將其復(fù)制兩份,分別命名為: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 #接下來(lái)安裝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/

   準(zhǔn)備要轉(zhuǎn)換的字體文件,可在C:\WINDOWS\Fonts 下找,或者去下載。  

?????  這里我們是下載的wqy-zenhei.ttf。

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

  啟動(dòng)qvfb,并在qvfb里運(yùn)行makeqpf軟件

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

  

  分別輸出16、24、32等字號(hào),這樣在輸出路徑指定的目錄里就能看到這些文件了(注意:如果是選擇根目錄,則看不到文件,要在終端里才能看到)

  為什么是qpf2,細(xì)致的朋友可能看出來(lái)了,這得說(shuō)明一下,qpf是qt2和qt3用的,后來(lái)qt4改成了qpf2,而且我們可以看到,字號(hào)16的,直接就是16,不再是160了,下面就來(lái)看看使用吧,和上面的還是有一點(diǎn)點(diǎn)區(qū)別的。

  還是向上面一樣設(shè)置,假設(shè)我要顯示24號(hào)的字體:

??? QFont font;

??? font.setPointSize(160);  這里是設(shè)成24嗎,設(shè)置后發(fā)現(xiàn)很小,只有當(dāng)設(shè)成80的時(shí)候,才夠24的大小,看了幫助文檔后,發(fā)現(xiàn)原來(lái) setPixelSize 才是設(shè)置字號(hào)的,改成 font.setPixelSize(24); 就可以了。(pointSize是一個(gè)相對(duì)值,和DPI相關(guān);一般Windows上的DPI值是96,而embedded linux的DPI值一般是72,所以字體會(huì)顯得小了很多。所以應(yīng)該用QFont::setPixelSize)。

font.setFamily(("wenquanyi"));//這個(gè)Family怎么設(shè),是文件名嗎,不是,要在這里看

font.setFamily(("?

WenQuanYi Zen Hei"));

//有空格的,不要丟了

其它的設(shè)置就一樣了,

運(yùn)行一下,字是不是變大了。

3、解決setPointSize字太小的問(wèn)題

?  在UI編輯器里,并沒(méi)有setPixelSize的設(shè)置,只有setPointSize。如果要在開(kāi)發(fā)板上顯示正常的字號(hào),必須要將PointSize設(shè)得很大,那么在計(jì)算機(jī)上的字就變得超大,無(wú)法通過(guò)ui編輯器達(dá)到所見(jiàn)即所得的效果。前面我們說(shuō)過(guò),這是因?yàn)轱@示器DPI不同的原因。在QT應(yīng)用中,可通過(guò)環(huán)境變量來(lái)設(shè)置DPI,如下:

export QWS_DISPLAY="LinuxFB:mmWidth95:0" export QWS_SIZE="640x480" 復(fù)制代碼

  重新啟動(dòng)QT應(yīng)用程序時(shí),發(fā)現(xiàn)字號(hào)和計(jì)算機(jī)上的字號(hào)相差不那么大了,95的值并不是很準(zhǔn)確,需要跟據(jù)顯示器來(lái)調(diào)整,輸入合適的DPI值,(我用群創(chuàng)AT056TN53的屏,DPI值設(shè)置為180比較合適)

4、進(jìn)一步的嘗試

  QT直接支持TTF的字體文件,我們直接復(fù)制幾個(gè)ttf文件,至/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts目錄下,將qpf的文件刪除

  重新在開(kāi)發(fā)板上運(yùn)行,發(fā)現(xiàn)幾種字體和字號(hào)都能支持,看來(lái)系統(tǒng)中有多種字號(hào),用ttf文件還是蠻方便的。


結(jié)語(yǔ):

?? ? 有人說(shuō),ttf文件很大,比較費(fèi)flash,QPF是點(diǎn)陣字庫(kù)文件,占用flash較小,而且訪問(wèn)速度比ttf快。目前,通過(guò)目測(cè)暫時(shí)分辯不出快慢,但TTF文件只有10M左右,轉(zhuǎn)換出來(lái)的qpf文件加起來(lái)一共有一百來(lái)兆。比ttf費(fèi)flash多了,不知是否是設(shè)置的原因。

參考資料:

如何構(gòu)建Qt4.7.0嵌入式開(kāi)發(fā)環(huán)境??http://blog.163.com/allegro_tyc/blog/static/33743768201101311239471/

QT中QPF字庫(kù)的制作與旋轉(zhuǎn)字體的實(shí)現(xiàn) http://www.360doc.com/content/10/0308/00/79031_17944837.shtml

Qt 字體大小的計(jì)算 ?http://losemyheaven.blog.163.com/blog/static/17071980920111283934557/

總結(jié)

以上是生活随笔為你收集整理的qt4.7 字体字号设设置;中文乱码,的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。