引言

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

实验结果:

嵌入式Qt4.8.0支持ttf字库,并显示中文的更多相关文章

  1. 向Tiny6410移植QT4.7.0版本

    在移植QT之前我们首先要安装tslib,没有移植的可以看这篇文章移植. http://www.cnblogs.com/ynxf/p/5392476.html step 1: echo yes |../ ...

  2. QT5.1.0,QT4.8.0以及VC2010、VC2012的测试对比

    QT5.1.0,QT4.8.0以及VC2010.VC2012的交叉测试对比. 测试1: 用VC2012静态编译了QT5.1.0. 编译速度很慢,生成完成后,用VC2012+QT5.1.0进行程序生成, ...

  3. WebStorm 7.0 支持更多的Web技术

    JetBrains刚刚发布了WebStorm 7.0 GA,支持EJS.Mustache.Handlebars.Web组件.Stylus.Karma.Istanbul.Compass,并增强了很多功能 ...

  4. C#5.0支持的await格式

    C#5.0支持的await格式 C#5.0引入了编译器支持的 async 和 await 关键字,这就为开发者提供了使用同步思想写异步代码的方便. 但是有些传统函数仅提供了异步回调实现,如何对其封装, ...

  5. 海思QT4.8.0开发总结

    1.QT4.8.0移植 2.QT4.8.0界面的透明度设置 发现设置空间透明度时候,QT显示的绿色的背景,没有透明!设置如下: 在程序起始的地方设置: hisi_init(); QWSServer:: ...

  6. 干货来袭:Redis5.0支持的新功能说明

    Redis5.0支持的新特性说明 本文内容来自华为云帮助中心 华为云DCS的Redis5.x版本继承了4.x版本的所有功能增强以及新的命令,同时还兼容开源Redis5.x版本的新增特性. Stream ...

  7. QT支持TTF字体

    1.编译QT库时需要支持TTF字体 ./configure -qt-freetype -fontconfig ... 2.将TTF字符库拷贝到QT_QPA_FONTDIR下 # 注意,如果不清楚字体所 ...

  8. Qt学习笔记-Qtcreator的webkit和qt4.7.0的版本有关

    之前下载了一个最新的是qtcreator,是通过ubuntu的是apt-get下载的.可是里面没有webkit控件.网上的网友说是最新的没有了.要用老版的,于是下载了一个2.5.2的就正常了. 用老版 ...

  9. Qt学习笔记-嵌入式qt程序支持显示中文

    移植后得qt程序在开发板上运行时无法显示中文. 拷贝windows中的字体也不行. 从网上找到方法. 添加以下代码:需要头文件  #include <QTextCodec> QTextCo ...

随机推荐

  1. rqalpha环境搭建(windows版)

    windows环境: win7 64bit rqalpha版本3.0.9 参考文档:http://rqalpha.readthedocs.io/zh_CN/latest/intro/install.h ...

  2. mysql语法 -- concat函数

    mysql CONCAT(str1,str2,…)                        返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL.或许有一个或多个参 ...

  3. java-信息安全(十四)-初探SSL

    原文地址 http://snowolf.iteye.com/blog/397693 我们需要构建一个由CA机构签发的有效证书,这里我们使用上文中生成的自签名证书zlex.cer     这里,我们将证 ...

  4. Java中创建线程的三种方式以及区别

    在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...

  5. [JS] Topic - hijack this by "apply" and "call"

    Ref: 详解js中的apply与call的用法 call 和 apply二者的作用完全一样,只是接受参数的方式不太一样. 参数形式: Function.apply(obj,args) call方法与 ...

  6. 如何在Ubuntu 16.04上安装配置Redis

    如何在Ubuntu 16.04上安装配置Redis Redis是一个内存中的键值存储,以其灵活性,性能和广泛的语言支持而闻名.在本指南中,我们将演示如何在Ubuntu 16.04服务器上安装和配置Re ...

  7. Linux->Windows主机目录和文件名中文乱码恢复

    目录 Linux->Windows主机目录和文件名中文乱码恢复 声明 一. 乱码问题 二. 调试环境 三. 目录和文件名乱码恢复 3.1 可选方案 3.1.1 通过合适的编解码转换 3.1.2 ...

  8. exec vs sp_executesql

    1.exec  vs  sp_executesql 1.1 说到exec了解SQLServer的朋友第一反应应该是它用来执行存储过程,对的这是其一,另一个作用是执行一个动态批处理.总结下:a.执行一个 ...

  9. day_4_24 py

    ''' 函数的嵌套调用应用 ''' # def print_line(): # print("="*50) # def print_5_line(): # i = 0 # whil ...

  10. url自动补全index.php

    location / { index index.html index.htm index.php l.php; autoindex on; if (!-e $request_filename) { ...