标题:qt-2.3.10 中文显示乱码。。快崩溃了!!!!
作者:seariver
日期:2009-05-18 10:16
内容:
我在代码中设置了
a.setDefaultCodec(QTextCodec::codecForName("GBK"));
a.setFont(QFont("unifont",15));
QPushButton h(QObject::tr("QT中文"),0);
在屏上显示的是乱码汉字。
如果注释掉a.setFont(QFont("unifont",15));这行,就是3个方块。
如果注释掉a.setDefaultCodec(QTextCodec::codecForName("GBK"));这行,就是英文似的乱码。
已经在开发板里/usr/qt/lib/fonts中复制了fontdir和unifont*.qpf字体文件。
感觉中文编码已经支持,但中文字体哪里不对
我是完整编译,就是“5”,需要在编译qt时改哪些地方么?!
老大们帮忙解决下。。。。也可以发我邮箱seariver_85@hotmail.com,拜谢了
#1 [yafei 05-22 18:34]
用
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());试试
#2 [speaker424 10-29 14:46]
不知道你这个问题解决了没有,我也遇到相同的问题
#3 [rooney 11-05 22:02]
我的QtEmbedded程序中的中文字符为什么显示成方块?
两个可能的原因:
一是qte的库未编译进对中文textcodec的支持, 解决方案:修改qconfig-qpe.h, 去掉CODEC有关的宏, 重新configure和make
二是程序中选用的字体不是中文字体(默认的字体是Helvetica,没有中文), 需要在程序中指定一个中文字体, 如qte自带的unifont(这个字体大家普遍的看法是看上去像残废), qt4版本里新加入了文泉驿的unicode字体, 可以在源码包里找到,比较漂亮, 推荐。
------------------------------------------------------------------------------------------------------------------------------------------------
接下来谈谈我是怎么做的:
(1)configure的时候首先带-h看下说明,发现默认是full安装,就没有CODEC这些问题,那么显示成方块就是没有中文字体了,我用unifont试了下发现可以了
(2)下载了qtopia-core-opensource-src-4.2.0,把qtopia-core-opensource-src-4.2.0/lib/fonts下面的东西全部copy覆盖掉qt-embedded-free-3.3.5/lib/fonts下的内容,然后用wenquanyi字体,发现效果挺好的. 当然你可以自己用makeqpf自己做字体,嘿嘿不懂可以联系我:670451346
(3)我的测试程序如下:
#include
#include
#include
#include
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QTextCodec *codec = QTextCodec::codecForName("GBK");
app.setDefaultCodec(codec);
app.setFont(QFont("wenquanyi", 10));
QPushButton quit(QObject::tr("让世界知道我们都是中国人\r\n五千年的风和雨"), 0 );
quit.resize(100, 100);
QObject::connect(&quit, SIGNAL(clicked()), &a, SLOT(quit()));
a.setMainWidget(&quit);
quit.show();
return a.exec();
}
#4 [0413301 11-06 20:41]
#include
#include
#include
#include
#include
#include //for dispaly system icon
#include
#define version "1.0.0"
QTextCodec* gbk_codec = QTextCodec::codecForName("GBK");
QString ChineseAndEnglish(const char*ChineseString)
{
return gbk_codec->toUnicode(ChineseString);
}
int main(int argc, char** argv)
{
ZApplication app (argc, argv);
RES_ICON_Reader ir;
QPixmap *pm;
pm = new QPixmap("Dialog_Complete.gif");
int reply = ZMessageBox::information(0, pm[0],ChineseAndEnglish("梦中蝶舞"),ChineseAndEnglish("是"),ChineseAndEnglish("否"),ChineseAndEnglish("取消"));
switch(reply)
{
case 0:
ZMessageBox::timerMessage(0, pm[0],ChineseAndEnglish("第一个按钮......"),3);
break;
case 1:
ZMessageBox::timerMessage(0, pm[0],ChineseAndEnglish("第二个按钮......"),3);
break;
case 2:
ZMessageBox::information(0, pm[0],
QString(ChineseAndEnglish(
"
关闭手机 Ver:%1"
//  ..
#5 [0413301 11-06 20:42]
总结起来,头文件加#include
再加这个函数在最开头
QTextCodec* gbk_codec = QTextCodec::codecForName("GBK");
QString ChineseAndEnglish(const char*ChineseString)
{
return gbk_codec->toUnicode(ChineseString);
}
用到中文就ChineseAndEnglish("第二个按钮......")