• 8845阅读
  • 6回复

qt-2.3.10 中文显示乱码。。快崩溃了!!!! [复制链接]

上一主题 下一主题
离线seariver
 
只看楼主 正序阅读 楼主  发表于: 2009-05-18

我在代码中设置了

  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,拜谢了
离线rqzrqh

只看该作者 6楼 发表于: 2009-11-06
一般两句话搞定
设置codecForName
QString::fromStdString,
还有问题就是字体字库问题了。
离线0413301
只看该作者 5楼 发表于: 2009-11-06
总结起来,头文件加#include <qtextcodec.h>
再加这个函数在最开头
QTextCodec* gbk_codec = QTextCodec::codecForName("GBK");
QString ChineseAndEnglish(const char*ChineseString)
{
    return gbk_codec->toUnicode(ChineseString);
}
用到中文就ChineseAndEnglish("第二个按钮......")
离线0413301
只看该作者 4楼 发表于: 2009-11-06
#include <ZMessageBox.h>
#include <ZApplication.h>
#include <qtextcodec.h>
#include <stdio.h>
#include <stdlib.h>
#include <ezxres.h> //for dispaly system icon
#include <ZScrollView.h>
#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(
            "<font size=3><qt><p><b>关闭手机 Ver:%1</b></font>"
            //    "<font size=2>For MOTO A1200<br></font>"
            "<font size=2>For MOTO E6<br></font>"
            "<font size=2>移动天使<br></font>"
            "<font size=3>Copyright(C)梦中蝶舞<br></font>"
            "空间<br> <font color=\"#000080\">http://home.51.com/home.php?user=mengzhongren1987<br></font>"
            "<font size=2>中国 甘肃  天水<br></font>"
            "<font size=2>2008/9/17<b></qt></font>")).arg(version),
            ChineseAndEnglish("关闭"));
        break;
    }
    return 0;    
}
离线rooney
只看该作者 3楼 发表于: 2009-11-05
我的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 <qapplication.h>
#include <qpushbutton.h>
#include <qtextcodec.h>
#include <qfont.h>


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();
}
离线speaker424
只看该作者 2楼 发表于: 2009-10-29
不知道你这个问题解决了没有,我也遇到相同的问题
离线yafei
只看该作者 1楼 发表于: 2009-05-22

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());试试
快速回复
限100 字节
 
上一个 下一个