嵌入式Qt支持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模式。保存后编译没有问题。

实验结果:





  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: TTF字库,全称为TrueType字库,是一种常用于计算机系统的字体格式。我们可以通过查看TTF字库支持字符集来了解其支持哪些文字。 首先,每个TTF字库都有一个内部的“cmap”表,该表记录了字库支持的文字字符。这些字符可以是汉字、英文字母、数字、标点符号、特殊符号等等。通过查看“cmap”表,我们可以确定字库是否支持我们所需的文字。 其次,TTF字库还可以通过其Unicode编码范围来判断其支持的文字。Unicode是一种国际字符编码标准,字库中的每个字符都有唯一的Unicode编码。我们可以查看TTF字库中的Unicode编码范围,以确定字库支持的文字类型。例如,如果字库的Unicode编码范围包含了汉字范围(U+4E00至U+9FFF),那么该字库支持汉字。 此外,TTF字库还可能包含一些特殊的编码格式,如GBK、GB2312等等。这些编码格式主要是为了支持特定地区的文字,如中文、日文、韩文等。我们可以查看字库的编码格式,以确定其是否支持我们所需的文字。 总之,通过查看TTF字库的“cmap”表、Unicode编码范围和编码格式,我们可以了解字库支持的文字类型。这样我们就能确定字库是否适合我们的需求,并选择合适的字库支持我们所需的文字。 ### 回答2: TT字体文件(TrueType Font)是一种用于存储字体信息的文件格式,用于在电脑中显示各种文字。TT字体文件通过字库(Font)来支持不同的文字字符。 通过查看TT字体文件的字符集信息,可以确定字库支持的文字范围。TT字体文件通常会在其文件头部分包含一个字符映射表(Character Map),该表列出了字库所包含的字符以及与之对应的字形信息。 一般来说,TT字体文件支持包括拉丁字母、数字、标点符号等在内的基本字符集。而对于特定语言和文字,TT字体文件可以根据需要扩展字符集以支持更广泛的字形。例如,如果字库设计者希望支持中文、日文或韩文等非拉丁文字,他们会在字库中添加相应的字符集,以包含这些文字的字形信息。 要确定TT字体文件是否支持某个特定的文字,可以通过检查字库的字符映射表或者直接尝试在相应的软件中显示该文字。如果字库中包含了该文字的字形信息,并且相应的编码被映射到了字形上,那么该字体文件支持这个文字。 总之,要确定TT字体文件支持什么文字,可以通过检查其字符映射表以及在相关软件中尝试显示相应文字来判断。字库设计者根据需要决定字库所包含的字符集,以支持特定的语言和文字。 ### 回答3: TTf字库是TrueType字体的缩写,它是一种常用的字体文件格式。TTf字库能够支持多种文字,具体可以从以下几个方面来判断: 首先,TTf字库可以支持广泛的拉丁字母文字。这包括了英语、法语、德语、意大利语等欧洲语言中使用的字母。TTf字库一般会包含这些语言所需的字母和符号。 其次,TTf字库支持一些亚洲文字,如汉字、日文和韩文等。这些文字系统的符号和字符数量较多,所以TTf字库需要包含更多的字符集和字形变体,以满足不同的需求。 此外,TTf字库还能够支持一些其他语言的字母和符号,比如希腊字母、俄文字母、阿拉伯字母、希伯来字母等。这些字母在不同的语言中有着重要的地位,TTf字库能够包含它们以确保跨语言的兼容性。 最后,TTf字库还可以支持一些特殊符号和图形,比如数学符号、货币符号、箭头、表情符号等。这些符号和图形在各种文本编辑和排版工作中经常用到,TTf字库能够提供合适的字形和变体。 总的来说,TTf字库是一种通用的字体文件格式,具有广泛的语言和符号支持能力。不同的字库内含字符集和字形会有所差异,因此在选择字库时需要根据需要进行适当的判断和选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

john_liqinghan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值