引言

最近在做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. 【转】HTML embed标签使用方法和属性详解

    一.基本语法 代码如下: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,Netscape及新版的IE 都支持.url为音 ...

  2. Cisco DHCP Snooping + IPSG 功能实现

    什么是DHCP? DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,前身是BOOTP协议, 使用UDP协议工作,常用的2个端口 ...

  3. 【hive】 hive 加载数据

    1. insert 插入数据 要保证启动了jobhistory 否则会抛出异常 hdfs中查看内容 2. create table 表名字 select 字段... from  表名 hdfs查看数据 ...

  4. checkmysql.sh

    #!/bin/sh # add by lxr MYSQL_SOCK="/tmp/mysql.sock" MYSQL_PWD="qq139547" ARGS=1 ...

  5. Redmine发布新闻,自动发送邮件功能失效恢复

    问题描述:操作数据库,修改项目公开状体后,创建新闻,自动发送邮件功能失效. 问题检查和恢复测试: 1.检查管理员权限 2.重新手动配置项目公开状态,覆盖数据操作 3.对比其他正常项目数据库状态,进行恢 ...

  6. 修改Jenkins的主目录步骤

    在使用Jenkins做持续集成过程中,在构建很多次后发现有时在构建的时候系统提示磁盘空间不足,此时检查发现Jenkins的主目录挂载区放在了服务器根目录下,占用空间较大,此时除了对服务器的磁盘进行扩容 ...

  7. db lock

    1.锁的基本概念和功能 所谓锁(Lock),实际上是加在数据库.表空间.表.行或者数据页上的一种标记,用户在对各种数据库对象进行读取或者写入操作时首先要看该对象上的锁是否允许其进行相应操作.从允许用户 ...

  8. myEclipse中项目无法部署到tomcat

    问题现象: 从svn上新下载了项目到win环境上. 部署项目的时候,在servers视图里,Add Deployment,如下图: 发现只有一个项目可以加载,另外的项目看不到:可是明明我并没有部署过啊 ...

  9. 卓越研发之路 MOT技术管理者课堂

    引言:从2018年11月起,在北京.大连.上海.南京.杭州.武汉.成都.西安.深圳.广州等地巡回举办的技术沙龙.活动旨在交流软件研发及互联网技术的实战经验,分享优秀的案例实践,通过平台结识更多友人,挖 ...

  10. cc2650 7x7封装更换为 5X5 4x4

    https://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/104028.aspx 解决方案 ...