引言

最近在做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. [转]svn 清理失败 (cleanup 失败) 的解决方法
  2. Mongodb Manual阅读笔记:CH4 管理
  3. jQueryEasyUI DateBox的基本使用
  4. How to write a windows service
  5. uva 10160
  6. java常用正则表达式
  7. 图的建立——邻接矩阵表示(C语言+VC6.0平台)
  8. mvc ChildActionOnly + ActionName的用法
  9. ADO.NET复习总结(6)-断开式数据操作
  10. 使用JCrop进行图片裁剪,裁剪js说明,裁剪预览,裁剪上传,裁剪设计的图片处理的工具类和代码
  11. jsp内置对象-response对象
  12. 暂时禁止Cnario Player开机自动启动的办法
  13. CentOS7下安装Redis
  14. jvm 线上命令
  15. Unity 2017 Game Optimization 新版
  16. iOS- XKZoomingView 简单的图片缩放预览,支持横屏、长图【手势:单击、双击、放大缩小】
  17. tomcat启动项目报错:The specified JRE installation does not exist
  18. golang 中处理大规模tcp socket网络连接的方法,相当于c语言的 poll 或 epoll
  19. 2018年浙江理工大学程序设计竞赛校赛 Problem I: 沙僧
  20. python 自然语言处理(三)____条件频率分布

热门文章

  1. centos6.5安装mongodb2.6
  2. table给tbody设置滚动条
  3. linux手动安装sbt过程
  4. 《objective-c基础教程》学习笔记(四)—— OC面向对象编程初探
  5. 01简单工厂模式SimpleFactory
  6. 【python】并查集
  7. python3之end关键字
  8. MySQL主从复制介绍
  9. TOP100summit:【分享实录-猫眼电影】业务纵横捭阖背后的技术拆分与融合
  10. php实现简单消息发送+极光推送系统