嵌入式Qt支持ttf字库,并显示中文

本文介绍了解决QT项目中中文显示问题的方法。通过使用freetype支持ttf字体,避免了复杂的qpf字库制作过程。提供了配置说明及示例代码,实现不同大小字体的中文显示。

引言

        最近在做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模式。保存后编译没有问题。

实验结果:





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

john_liqinghan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值