Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300695
  • 博文数量: 71
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 564
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-20 18:15
个人简介

用编程改变大众。。。

文章分类

全部博文(71)

文章存档

2016年(7)

2015年(54)

2014年(10)

我的朋友

分类: C/C++

2014-10-23 15:30:45

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

介绍:

 1、初体验:

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

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

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

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

 

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

qt中程序如下:

#include  #include  #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字号的字体,又或者你要显示其它字体,而网上又下载不到,怎么办?

wenquanyi附件:?font_wenquanyi.part1.rar?  ?font_wenquanyi.part2.rar?  ?font_wenquanyi.rar?  

2、来点真枪实料的

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

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

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

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:WINDOWSFonts 下找,或者去下载。  

       这里我们是下载的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

 

 

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

 

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

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

    QFont font;

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

font.setFamily(("wenquanyi"));//这个Family怎么设,是文件名吗,不是,要在这里看

 

font.setFamily((" 

WenQuanYi Zen Hei"));

//有空格的,不要丢了

其它的设置就一样了,

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

3、解决setPointSize字太小的问题

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

export QWS_DISPLAY="LinuxFB:mmWidth95:0" [喝小酒的网摘]http://blog.const.net.cn/a/8819.htm
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文件还是蛮方便的。

结语:

     有人说,ttf文件很大,比较费flash,QPF是点阵字库文件,占用flash较小,而且访问速度比ttf快。目前,通过目测暂时分辩不出快慢,但 TTF文件只有10M左右,转换出来的qpf文件加起来一共有一百来兆。比ttfflash多了,不知是否是设置的原因。

参考资料:

如何构建Qt4.7.0嵌入式开发环境  http://blog.163.com/allegro_tyc/blog/static/33743768201101311239471/

QT中QPF字库的制作与旋转字体的实现 

Qt 字体大小的计算  http://losemyheaven.blog.163.com/blog/static/17071980920111283934557/[喝小酒的网摘]http://blog.const.net.cn/a/8819.htm

相关文章

·  qt sqlite小结

1.要实现的功能:一个表finger_table,有三个字段,pageId(INTEGER) name(text) is_empty(INTEGER)
要找出 is_empty为0的记录的个数

    QSqlQuery query;
    query.prepare("

·  Qt线程同步

在Qt中使用线程,没有Mfc中那么繁琐,它提供了QThread线程类,提供了创建一个新线程的方法。线程通过重载QThread::run()函数来完成其操作的,这一点与Java中的线程类相似。
    实现一个简单的继承自QThread的用户线程类,代码如下。 class Thread : public QThread 
{

·  QT支持中文显示

为了使QT能够支持中文,只需要在main()中加入 QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));这句代码就行。         若显示的汉字是乱码的话,需要将汉字用tr(" ")括起来。  &n

·  Qt源码分析之信号和槽机制

Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的
说法,简单点说就是如何在一个类的一个函数中触发另一个类的另一个函数调用,而且还要把相关的参数传递过去.好像这和回调函数也有点关系,但是消息机制可比回调函数有用
多了,也复杂多了 MFC中的消息机制没有采用

·  QT 的信号与槽机制

QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT 库的基础之上。QT 支持下列平台:MS/WINDOWS-95、98、NT 和 2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX


参考文献:

§ IP:61.177.26.114:QT 中文字体制作

§ IP:61.150.43.59:文泉驿字体 qtopia 旋转字体

§ IP:58.210.81.202:qt 中文字库

§ IP:61.150.43.59:QWS_DISPLAY 旋转之后汉字显示不出来

§ IP:120.192.147.67:qt 字体

§ IP:118.202.225.7:Qt中文 ttf字体库下载

§ IP:221.212.116.41:wenquanyi qt

§ IP:220.249.241.97:Qt Embedded linux 显示汉字

§ IP:219.133.110.52:QT 字体文件

§ IP:159.226.52.120:嵌入式QT中文字库文件

§ IP:119.136.78.19:QT 调用TTF文件

§ IP:101.5.131.146:arm linux QT 汉字不显示

§ IP:221.226.110.230:QT中文在AIX下无法显示

§ IP:60.247.46.39:qt wenquanyi 段错误

§ IP:113.118.119.178:qt 4如何安装字体库

§ IP:116.231.104.54:qt4.7 tar.gz download

§ IP:14.144.160.9:QT setFamily

§ IP:119.6.126.118:qt 字体 少

§ IP:183.128.239.10:qt ttf 环境变量

§ IP:183.37.131.81:QFont 文件名称

§ IP:222.212.168.163:qt 分别设置 中 英 字体

§ IP:119.6.126.101:wenquanyi12

§ IP:120.128.2.152:makeqpf 工具使用方法

§ IP:119.6.72.30:qt嵌入式中文环境配置

§ IP:221.4.230.156:Qt支持的字体

§ IP:218.66.216.188:setpointsizesetpixelsize区别

§ IP:115.236.91.154:qt4 字体小

§ IP:61.141.149.28:QT QFont 装入qpf2

§ IP:218.17.215.34:export QWS_DISPLAY="LinuxFB:mmWidth95:0"

§ IP:121.37.38.248:较小中文字库 qpf

 

阅读(3356) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~