嵌入式Qt4.8.0支持ttf字庫,並顯示中文


引言

        最近在做QT項目發現中文沒法顯示,於是百度QT嵌入式顯示中文,基本上提示的都是把ttf字庫轉換為QPF(QT專門支持二進制的),發現這個qpf本身制作就很麻煩,按照網上的做法實實在在來了一邊,發現編譯一個qvfb都好麻煩了,還有makeqpf程序。qvfb屬於x86用於給QT提供程序提供fb環境的。makeqpf不能直接在系統上面跑,必須依賴於系統fb才能運行。發現編譯qvfb有兩個問題:一個libpng需要安裝,一個是配置成X86的。makeqpf和qvfb是兩種不應的格式,及:
makeqpf是帶-embedded x86選項的配置
qvfb是正常沒有-embedded選項的配置
編譯好后發現使用makeqpf的file加載fft有問題,沒法加載。后面就不弄了。而且弄個出來的qpf文件只是固定大小的,不能縮放。不同字體大小還得定制多個qpf字庫。后面想着qt應該可以加載ttf,搜索網絡發現沒有相關的介紹,於是就自己摸索了。於是有點心得,便記錄一下過程。

 

freetype簡介

        freetype是完全免費,不用擔心版權的問題,freetype支持ttf字庫的加載,以及文字的提取。支持多種字體格式。為什想到freetype呢?原因是查看qt的配置選項里面有個-qt-freetype,加上之前自己利用freetype成功提取了中文字的點陣。於是就想到qt應該也支持的。於是就把該選項編譯進去。

 

 

 

QT配置支持ttf字庫選項:

./configure -qt-freetype ...

配置好后,make,make install 就可以生成QT庫,

事例代碼:

修改一個demo嘗試使用的是macmainwindow,這個簡單,makefile要去掉蘋果庫的鏈接。
代碼如下:

 

#include <QtGui>
#include "macmainwindow.h"
#include <QDebug>
#include <QFontDatabase>
#include <QTextCodec>
#include <QPainter>
#include <QWSServer>
#if 0


int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    MacMainWindow mainWindow;
    mainWindow.show();
    return app.exec();
}


#else
int main(int argc, char **argv)
{
	QWSServer::setBackground(QColor(0,0,0,0));
    QWSServer::setCursorVisible(false);
	QFontDatabase database;
	foreach (const QString &family, database.families(QFontDatabase::SimplifiedChinese))
    {
		qDebug()<<family;
    }


    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
	QPalette pa;
    pa.setColor(QPalette::WindowText,Qt::red);
    QApplication app(argc, argv);
	QString chinese;
    QLabel label ,label1;
	QFont font("Source Han Sans CN",20,QFont::Bold);
	label.setGeometry(200,80,900,200);
	label.setFont(font);
	chinese = QString::fromUtf8("思源字體\r\nQT中文字體顯示不同大小任意設置:20號加粗字體");
    label.setText(chinese);
	label.setPalette(pa);
    label.show();
	QFont font1("Source Han Sans CN",30,QFont::Normal);
	label1.setGeometry(200,280,900,200);
	label1.setFont(font1);
	chinese = QString::fromUtf8("思源字體\r\nQT中文字體顯示不同大小任意設置:30號正常字體");
    label1.setText(chinese);
	label1.setPalette(pa);
    label1.show();


    return app.exec();
}


#endif




編譯后,生成macmainwindow。
設置好QT運行環境變量,運行macmainwindow -qws即可出來顯示中文的界面。
可以刪除fonts下的很多字體,僅留下SourceHanSansCN-Regular.ttf這個字體,節省空間。

注意:

有可能這樣子仍顯示亂碼,這個是由於你的C文件編碼格式有關系,可以使用Notepad++修改C文件編碼格式,使用UFT-8無BOM模式。保存后編譯沒有問題。

實驗結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM