QT字体的设置

摘要:html

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

介绍:编辑器

 1、初体验:工具

   QT程序中指明的字体和字号在/fonts目录下没有对应的字库文件时,QT会选择某一个存在的字库文件来显示;那么,若是你的系统中只有须要一种字体和字号,那么则能够将fonts目录下不须要的字库文件所有删掉,只保留这个须要的字体文件便可。post

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

    首先,下载font_wenquanyi字体,字体有ttf、bdf、qpf等格式,咱们这里下载的是qpf格式,若是是其它格式,则须要进行转换。ui

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

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

qt中程序以下:code

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

二、来点真枪实料的

  下面将介绍如何制做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

  

 

  分别输出1六、2四、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怎么设,是文件名吗,不是,要在这里看

font.setFamily((" 

WenQuanYi Zen Hei"));

//有空格的,不要丢了

其它的设置就同样了,

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

 

三、解决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文件仍是蛮方便的。

 

 

结语:

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

 

参考资料:

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

QT中QPF字库的制做与旋转字体的实现 http://www.360doc.com/content/10/0308/00/79031_17944837.shtml

Qt 字体大小的计算  http://losemyheaven.blog.163.com/blog/static/17071980920111283934557/

 
http://www.cnblogs.com/liu_xf/archive/2011/07/05/2098144.html
相关文章
相关标签/搜索