解决方法,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