zoukankan      html  css  js  c++  java
  • QT4如何处理中文字符

    http://zxwmail.blog.163.com/blog/static/1209473842010102984745844/

     

    如何解决中文乱码的问题?

    1、使用setDefaultCodec进行设置;
    qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
    QLabel *label = new QLabel( tr("中文标签") );
    可惜setDefaultCodec是QT3的函数,QT4已经不支持了。

    2、 设置QObject的成员函数tr()的编码;
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

    3、使用QString的fromLocal8Bit()函数;
    QString str;
    str = str.fromLocal8Bit("哈哈哈");
    hello.setWindowTitle(str);

    4、用QTextCodec的toUnicode方法来显示中文
    QLabel hello(QObject::tr("你好").toLocal8Bit());
    QTextCodec *codec = QTextCodec::codecForLocale(); 华夏网管站
    QString a = codec->toUnicode("安师大手动");

    以上各种都没有解决问题。
    继续没有搜索这个问题,终于在一个blog中发现了真正的答案:字库问题。

    “QT4下发现一个很奇怪的现象,就是对话框的Title“我是对话框”可以正确显示,而按钮就是小方块。总感觉是系统某些设置不对,而不是字符编码的问题,如果是字符编码问题,那么应该是乱码而不是小方块。忽然想到网上有提到过是字库的问题,觉得现象可以解释,标题栏和按钮文字不是同一种字体,而恰好按钮字体没有,所以是小方块,而不是乱码。
    网上搜了下QT4用的默认字体,没有查到,又看了QT4的源代码,代码太多,也没有找到。
    不过setFont函数引起了我的注意,在网上看到过这种方法。”

    参考上面的内容,修改代码:
    ...
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
    QFont font("Times",12,QFont::Normal,FALSE);
    app.setFont(font);
    ...
    label.setText(QObject::tr("同一个世界,同一个梦想!"));
    ...
    成功!显示中文正常!

    这个问题的解决真是太重要了,说实话真的有点疲惫,幸好没有放弃。yeah! 华夏网管站

    后记:使用qt的designer时,发现界面还是乱码。使用qtconfig设置font为Bitstream Charter后解决乱码问题

    ofAdmin.Com

  • 相关阅读:
    人生苦短之Python的urllib urllib2 requests
    近期测试BUG总结
    人生苦短之Python列表拷贝
    测试发展前景,测试人员的发展方向,测试趋势
    人生苦短之Python函数的健壮性
    Python视频教程
    人生苦短之Python文件的IO操作
    人生苦短之Python枚举类型enum
    人生苦短之Python类的一二三
    人生苦短之Python装饰器
  • 原文地址:https://www.cnblogs.com/wangzihao/p/2105478.html
Copyright © 2011-2022 走看看