这里涉及到一个类QTextCodec,可以查看帮助文档,来明白它的功能,以及怎么使用它。
(1)QTextCodec provides conversions between text encoding,用于文本编码之间的转换
QT使用Unicode来存储和操作字符串。但是在许多情况下我们希望用不同的编码方法来处理数据。
比如日本人用 Shift-JIS or ISO 2022-JP来存储文档,而俄罗斯人用KOI8-R or Windows-1251来存储文档。QT提供一系列的QTextCodec类来帮助处理non-Unicode格式到Unicode来转换。还可以创建自己的codec类。QT支持的encoding如下:(查看帮助文档)
(2)关于和它有关的使用
可以用QTextStream和它的setCodec()函数来读写文件。
如 QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
1、想在源代码中直接使用中文,而不使用tr()函数进行转换,怎么办?
答:在main函数中加入下面三条语句,但并不提倡
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
或者
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
使用GBK还是使用UTF-8,依源文件中汉字使用的内码而定
这样,就可在源文件中直接使用中文,比如:
QMessageBox::information(NULL, "信息", "关于本软件的演示信息", QMessageBox::Ok, QMessageBox::NoButtons);
2、Qt 中的中文:
如果使程序只支持一种编码,也可以直接把整个应用程序的编码设置为GBK编码, 然后在字符串之前加tr(QObject::tr),
#include <qtextcodec.h>
qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
QLabel *label = new QLabel( tr("中文标签") );