本文只描述Qt4的解决方法,Qt5没有尝试过,不做讨论。网上关于这个话题一搜一大堆,基本无外乎字符集编码的理论,看不明白。直接上代码吧!
#include "widget.h" #include <QApplication> #include <QTextCodec> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); Widget w; w.show(); return a.exec(); }
一般我的项目里在 main.cpp 文件里都会加上这三句代码,中文显示都能正常显示。
QTextCodec : 这个类提供文本编码之间的转换。
QTextCodec::codecForLocale()->name() : 这个成员函数返回最适合此语言环境的编解码器的指针。
QTextCodec::codecForName() : 这个成员函数返回与参数指定的名称最匹配的编解码器指针。如果没有匹配的则返回 0 。
QTextCodec::setCodecForLocale / QTextCodec::setCodecForTr / QTextCodec::setCodecForCStrings : 这个成员函数设置参数指定的编解码器。