关于qt/embedded无法显示中文(中文显示方块)的问题,qt中文论坛上这样说的:
两个可能的原因:
一是qte的库未编译进对中文textcodec的支持, 解决方案:修改qconfig-qpe.h, 去掉CODEC有关的宏, 重新configure和make
二是程序中选用的字体不是中文字体(默认的字体是Helvetica,没有中文), 需要在程序中指定一个中文字体, 如qte自带的unifont(这个字体大家普遍的看法是看上去像残废), qt4版本里新加入了文泉驿的unicode字体, 可以在源码包里找到,比较漂亮, 推荐。
对于使用文泉驿的unicode字体,新手看了还是一头雾水,当然包括我啦。经过不断的google终于能显示中文了。我使用的是qt/embedded 2.3.7,操作系统redhat9.0
步骤:
(1)获得文泉驿的中文字体
qt4版本里面通常都有,大家可以到http://www.qtcn.org/bbs/read.php?tid=3144去下载,在lib/fonts里面有很多wenquanyi_**_**.qpf的文件,将他们复制到qt/embedded的安装文件夹下,我系统里面是$QTDIR/lib/fonts,有些帖子上说还要修改$QTDIR/lib/fontdir文件中的内容,对于.qpf的字体是不需要指定字体与实际字体文件的映射的,可以通过fontdir文件中的内容看出来。fontdir文件规则可以参考http://blog.chinaunix.net/u2/65684/showart_520041.html。
wenquanyi_160_50.qpf表示16号非粗体字,wenquanyi_160_75.qpf表示16号粗体字。
(2)对于qt designer开发出的图形界面生成的.cpp文件,大体格式是这样的:
1 TextLabel_SNo = new QLabel( this, "TextLabel_SNo" );
2 TextLabel_SNo->setGeometry( QRect( 370, 20, 120, 30 ) );
3 QFont TextLabel_SNo_font( TextLabel_SNo->font() );
4 TextLabel_SNo_font.setFamily( "wenquanyi" );
5 TextLabel_SNo_font.setPointSize( 16 );
6 TextLabel_SNo_font.setBold( TRUE );
7 TextLabel_SNo->setFont( TextLabel_SNo_font );
8 QTextCodec *codec = QTextCodec::codecForName("utf8");
9 TextLabel_SNo->setText(codec->toUnicode("序列号", strlen("序列号")));
第3行QLabel对象TextLabel_SNo通过从QWidget继承的函数QFont font()返回窗口部件字体的当前设置,然后通过QFont的成员函数设置字体的family,size及bold。如:
这段代码设置12点的helvetica粗字体:
QFont f( "Helvetica", 12, QFont::Bold );
setFont ( f );
第8行中,QTextCodec提供了各种文本编码之间的转换,需要#include <qtextcodec.h>。其中QTextCodec::codecForName("utf8")寻找utf8(Unicode,8bit)的编码,QString QTextCodec::toUnicode ( const QCString & a, int len ) const 将中文字体“序列号”转换为Unicode格式并显示。