程序是如何去寻找需要的字库呢?
我们可以在QT文件系统目录下:/mnt/gui/qtopia/lib/fonts中找到qt自带的字库文件,
cd /mnt/gui/qtopia/lib/fonts
ls
unifont.bdf unifont_160_50_t5.qpf
helvetica_100_50.qpf helvetica_240_75_t15.qpf
helvetica_100_50_t10.qpf helvetica_240_75_t5.qpf
……
同时该目录下还有一个fontdir文件:
vi fontdir
……
helvetica helvR18.bdf BDF n 50 180 u
helvetica helvR24.bdf BDF n 50 240 u
# Unifont is available in source form from
http://czyborra.com/unifont/unifont unifont.bdf BDF n 50 160 u
babelfish babelfish.ttf FT n 50 0 s
smallsmooth verdana.ttf FT n 50 0 s 90
……
每一行是关于一种字体的设置,对应列的定义如下:
<字体名称> <字体文件名> <字体渲染类型> <是否斜体> <是否粗体> <尺寸> <字体标志> [尺寸列表]
main.cpp
#include <qapplication.h>
#include "mainwidget.h"
int main(int argc, char **argv)
{ QApplication app(argc,argv);
app.setFont(QFont("unifont",16,50));
QTranslator translator( 0 );
translator.load( QString("hello_CN.qm"),".");
app.installTranslator( &translator );
MyMainWidget *mymainwidget = new MyMainWidget(0);
mymainwidget->setGeometry(10,30,280,200);
app.setMainWidget(mymainwidget);
mymainwidget->show();
return app.exec();
}
<!--[if !supportLists]-->2. <!--[endif]-->生成mymain.pro工程文件
progen –t app.t –o mymain.pro
修改mymain.pro
TEMPLATE = app
CONFIG = qt warn_on release
HEADERS = mainwidget.h
SOURCES = mainwidget.cpp main.cpp
INTERFACES =
TRANSLATIONS = mymain_CN.ts
<!--[if !supportLists]-->3. <!--[endif]-->生成mymain_CN.ts
lupdate mymain.pro
其中,
<字体渲染类型>:可以为TTF,BDF,QPF三种类型;
<是否斜体>:y表示为斜体,n表示正常体;
<是否粗体>:50表示正常体,75表示粗体;
<标志>:a使用ASCII字符集,u使用unicode字符集,s使用锯齿平滑(anti-aliased);
<尺寸>:0,则系统从[尺寸列表]中提取可以转换的字体尺寸;
我们上面的中文下拉菜单程序就是利用qt自带的一种中文字体unifont,程序会读取/mnt/gui/qtopia/lib/fonts/fontdir文件,并匹配相应的字体,如果在程序中QFont("unifont",16,50)中参数设置不正确,就无法匹配到相关字体,所以自然就显示出了方块了。(同时字体标志一定要加上u,说明使用unicode字符集,否则也会出现方块)
知道如何读取中文字库文件,我们就可以制作自己喜欢的中文字库并显示了。
以上是我在网上查到的一些思路,但是按照上面的方法进行修改之后,我运行带有点阵字库的QT程序后出现自动关闭的错误。不知道原因何在?