qt中文乱码

来源:互联网 发布:pla算法 编辑:程序博客网 时间:2024/06/05 19:42

解决方法,csdn上看来的,设置为系统字体,用三个

QTextCodec::setCodecForTr()

QTextCodec::setCodecForCStrings()

QTextCodec::setCodecForLocale()

#include <QApplication>#include <QDialog>#include <QLabel>#include <QTextCodec>int main(int argc, char *argv[]){    QApplication a(argc, argv);    //Set Encode    QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("system"));    QTextCodec::setCodecForLocale(QTextCodec::codecForName("system"));    QDialog w;    QLabel label(&w);    label.setText("Hello World!你好,Qt!");   //attention!!     w.show();    return a.exec();}

另外一种方法,《QT快速入门》一书中的方法,只需要一个set,但是在label中填写文字的时候,需要

QObject::tr()

QTextCodec类提供了文本编码的转换功能。QTextCodec类中的静态函数setCodecForTr()用来设置

QObject::tr()函数所要使用的字符集。

QTextCodec::codecForLocale()返回了系统指定的字符集,QtextCodec::setCodecForTr()设置tr()用到的字符集。

总之,为了显示中文,需要设置字符集,然后使用QObject::tr()函数将字符串进行编码转换。

#include <QApplication>#include <QDialog>#include <QLabel>#include <QTextCodec>int main(int argc, char *argv[]){    QApplication a(argc, argv);    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  //set    QDialog w;    QLabel label(&w);    label.setText(QObject::tr("Hello World!你好,Qt!"));   //attention!! QObject::tr() used.    w.show();    return a.exec();}


Q:qt的IDE中编写程序,如上,运行没问题,但是但是换成直接用command line编译,代码是直接拷贝过去的,运行出问题额:

A:后来发现时文件默认编码问题:

qt直接创建的文件默认编码为ANSI
而win7中直接创建文本文件默认编码为UTF-8
我把自己创建的文件另存为ANSI格式之后,再编译运行,没有问题了

摘自:

http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73a6f8b89462383d60984642c101a39fec0567b4758869e20301cfc090db0ab7225761e26b090c3885dddccd37269d779203541c6171d905fb8cb37669f73c00db7b81996ad814684d8d4c4ae2744ba24127bf0e7fb291764b97886112695a28e49654861bafa4665e828773ee853&p=8f34c116d9c104f900bd9b7d0b1083&newp=9039ca16d9c11bf608e297780b5f97231610db2151d1d51f258d&user=baidu&fm=sc&query=qt+qlabel+%CF%D4%CA%BE%BA%BA%D7%D6%C2%D2%C2%EB&qid=&p1=4

0 0