原文地址:http://www.cnblogs.com/liu_xf/archive/2011/07/05/2098144.htm

摘要:

QT4.7.0在移植到开发板上的时候,中文支持是必不可少的,如何让QT支持中文,如何制作QT支持的字体文件,如何使QT UI编辑器中的字号与开发板中的字号一致。作者通过实验进行了一一验证。

介绍:

1、初体验:

   QT程序中指明的字体和字号在/fonts目录下没有对应的字库文件时,QT会选择某一个存在的字库文件来显示;那么,如果你的系统中只有需要一种字体和字号,那么则可以将fonts目录下不需要的字库文件全部删掉,只保留这个需要的字体文件即可。

上面是一种很方便的做法,无论程序中设置的字体和字号是怎样的,它始终都会按fonts目录下的这个唯一的字库文件格式来显示。但是,很多时候,我们需要多种字体和字号并存,那么下面将介绍如何添加wenquanyi 12 13 15 16 四种字号粗体和细体共8个字库文件,然后通过QFont来设置它们,访问对应的字库文件。

首先,下载font_wenquanyi字体,字体有ttf、bdf、qpf等格式,我们这里下载的是qpf格式,如果是其它格式,则需要进行转换。

然后将下载的字库文件复制到开发板的/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts目录下,如下图:

以wenquanyi_150_50为例:wenquanyi是字体,150表示是15号字体,50表示细体,75表示粗体。

qt中程序如下:

#include <QtGui/QApplication>
#include <QTextCodec>
#include "hmi_desktop.h"
 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //中文支持
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));        //支持Tr中文
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); //支持中文文件名显示
    QFont font;
    font.setPointSize(160); //实际上是16的字号,但设成16却不行
    font.setFamily(("wenquanyi"));
    font.setBold(false);
 
    a.setFont(font);
    //--
    Hmi_desktop w;
 
    w.show();
 
    return a.exec();
}

  在开发板上运行,怎么样,字体是不是变了。高兴吧,得意吧!

  好了,别得意忘了形,其实这仅仅只是一个开始。试想,如果你要显示32或者是48字号的字体,又或者你要显示其它字体,而网上又下载不到,怎么办?

2、来点真枪实料的

  下面将介绍如何制作QPF文件。

  QT有一个工具:makeqpf,是专门用来转换qpf文件的,但这个程序只能在嵌入式环境下运行,所以需要编译X86版的QT4.7。

  解压qt-everywhere-opensource-src-4.7.0.tar.gz,并将其复制两份,分别命名为:qt-4.7.0-x86,qt-4.7.0-pc(编译x86是为了得到makeqpf,编译pc是为了得到qvfb,arm版的之前编译了,这里就不用了)

cd qt-4.7.0-x86
./configure -prefix /usr/local/Trolltech/qt-4.7.0-x86 -opensource -confirm-license -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb -make tools
make
make install
 
cd qt-4.7.0-pc
./configure -prefix /usr/local/Trolltech/qt-4.7.0-pc -opensource -confirm-license
make
make install
 
#接下来安装PC版本的qvfp
cd qt-4.7.0-pc
cd tools/qvfp
make
cp qt-4.7.0-pc/bin/qvfp /usr/local/Trolltech/qt-4.7.0-x86/bin

  安装完成后,在下面的目录里就可以找到它们

cd /usr/local/Trolltech/qt-4.7.0-x86/bin/

   准备要转换的字体文件,可在C:\WINDOWS\Fonts 下找,或者去下载。  

 这里我们是下载的wqy-zenhei.ttf。

  将wqy-zenhei.ttf字体文件拷贝到/usr/local/Trolltech/qt-4.7.0-x86/lib/fonts中,这样是为了在makeqpf中找到它

  启动qvfb,并在qvfb里运行makeqpf软件

./qvfb -width 800 -height 480 &
./makeqpf -qws

  

  分别输出16、24、32等字号,这样在输出路径指定的目录里就能看到这些文件了(注意:如果是选择根目录,则看不到文件,要在终端里才能看到)

  为什么是qpf2,细致的朋友可能看出来了,这得说明一下,qpf是qt2和qt3用的,后来qt4改成了qpf2,而且我们可以看到,字号16的,直接就是16,不再是160了,下面就来看看使用吧,和上面的还是有一点点区别的。

  还是向上面一样设置,假设我要显示24号的字体:

QFont font;

font.setPointSize(160);  这里是设成24吗,设置后发现很小,只有当设成80的时候,才够24的大小,看了帮助文档后,发现原来 setPixelSize 才是设置字号的,改成 font.setPixelSize(24); 就可以了。(pointSize是一个相对值,和DPI相关;一般Windows上的DPI值是96,而embedded linux的DPI值一般是72,所以字体会显得小了很多。所以应该用QFont::setPixelSize)。

font.setFamily(("wenquanyi"));//这个Family怎么设,是文件名吗,不是,要在这里看(双击源ttf格式的文件查看)

font.setFamily(("

WenQuanYi Zen Hei"));

//有空格的,不要丢了

其它的设置就一样了,

运行一下,字是不是变大了。

3、解决setPointSize字太小的问题

  在UI编辑器里,并没有setPixelSize的设置,只有setPointSize。如果要在开发板上显示正常的字号,必须要将PointSize设得很大,那么在计算机上的字就变得超大,无法通过ui编辑器达到所见即所得的效果。前面我们说过,这是因为显示器DPI不同的原因。在QT应用中,可通过环境变量来设置DPI,如下:

export QWS_DISPLAY="LinuxFB:mmWidth95:0" 
export QWS_SIZE="640x480"

  重新启动QT应用程序时,发现字号和计算机上的字号相差不那么大了,95的值并不是很准确,需要跟据显示器来调整,输入合适的DPI值,(我用群创AT056TN53的屏,DPI值设置为180比较合适)

4、进一步的尝试

  QT直接支持TTF的字体文件,我们直接复制几个ttf文件,至/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts目录下,将qpf的文件删除

  重新在开发板上运行,发现几种字体和字号都能支持,看来系统中有多种字号,用ttf文件还是蛮方便的。

[转载]制作QT字库文件的更多相关文章

  1. 解析 Qt 字库移植并能显示中文 (下篇)

    原文http://mobile.51cto.com/symbian-272563.htm 本文介绍的是Qt 字库移植并能显示中文,需要的字体库文件,一般是多个.具体移植那一个,看你使用的字库是什么了, ...

  2. QT 打开文件对话框汇总

    Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ",  tr( ...

  3. 【QT】文件读写操作

    读取输出: QFile file("D:/Englishpath/QTprojects/1.dat"); if(!file.open(QIODevice::ReadOnly)) { ...

  4. 解析 Qt 字库移植并能显示中文 (上篇)

    原文http://mobile.51cto.com/symbian-272552.htm 本文介绍的是Qt 字库移植并能显示中文,需要的字体库文件,一般是多个.具体移植那一个,看你使用的字库是什么了, ...

  5. [转] 解析Qt资源文件使用

    解析Qt资源文件使用 转自:http://mobile.51cto.com/symbian-270121.htm 本文详细的介绍了Qt文件的使用,和大部分GUI框架设计工具一样,Qt也引入了资源文件系 ...

  6. [转]如何制作tizen镜像文件(图文教程)?

    http://blog.csdn.net/flydream0/article/details/9163119 之前已讲解了如何下载及编译tizen源码(http://blog.csdn.net/fly ...

  7. 制作静态库文件(.a文件)

    制作静态库文件(.a文件) 1.创建静态库工程: 在Xcode中new一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static ...

  8. 嵌入式:使用dd命令制作烧写文件

    1. 使用dd命令制作烧写文件 环境: bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtd ...

  9. Qt之文件操作 QFile

    原地址:http://blog.csdn.net/liuhongwei123888/article/details/6084761 今天学习QT的文件操作 1.QIODevice直接继承自QObjec ...

随机推荐

  1. css3练习

    读条的实现1 .div{position: relative;border: 1px solid #111;width: 80px;height: 60px} .div div{width: 20px ...

  2. maven手动添加jar包到pom仓库

    此处以顺丰jar包为例: mvn install:install-file -Dfile=D:\TSBrowserDownloads\SF-CSIM-EXPRESS-SDK-V1.-\SF-CSIM- ...

  3. .NET进阶篇-语言章-1-Generic泛型深入

    内容目录 一.概述二.泛型的好处三.泛型使用1.泛型方法2.泛型类.泛型接口四.泛型的功能1.泛型中的默认值2.约束3.协变逆变5.泛型委托4.泛型缓存五.总结 一.概述 泛型我们一定都用过,最常见的 ...

  4. ThinkPHP5实现定时任务

    ThinkPHP5实现定时任务 最近使用ThinkPHP5做了个项目,项目中需要定时任务的功能,感觉有必要分享下 TP5做定时任务使用到command.php的 步骤如下: 1.配置command.p ...

  5. PHP获取客户端的真实IP

    REMOTE_ADDR只能获取访问者本地连接中设置的IP,如中南民族大学校园网中自己设置的10.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址, 如果访问者使用代理服务器,将不 ...

  6. Cocos Creator实现左右跳游戏,提供完整游戏代码工程

    ​1. 玩法说明 游戏开始后,点击屏幕左右两侧,机器人朝左上方或右上方跳一步,如果下一步有石块,成功得1分,否则游戏结束. 2. 模块介绍 游戏场景分为2个:主页场景(home).游戏场景(game) ...

  7. canvas实现平面迁徙图

    前言 最近在做自己维护的一个可视化工具的时候,在添加基于echart的雷达图的时候,按照echart官网案例写完发现在自己项目中无法正常运行,排查了一番发现是我项目中echart的版本太低.找到问题原 ...

  8. netty源码解解析(4.0)-24 ByteBuf基于内存池的内存管理

    io.netty.buffer.PooledByteBuf<T>使用内存池中的一块内存作为自己的数据内存,这个块内存是PoolChunk<T>的一部分.PooledByteBu ...

  9. 02-17 kd树

    目录 kd树 一.kd树学习目标 二.kd树引入 三.kd树详解 3.1 构造kd树 3.1.1 示例 3.2 kd树搜索 3.2.1 示例 四.kd树流程 4.1 输入 4.2 输出 4.3 流程 ...

  10. 02-19 k近邻算法(鸢尾花分类)

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...