一、環(huán)境:
1、RedHat 10
2、QT4.5.0
3、linux 2.6.30
二、程序:
...
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
...
label.setText(QObject::tr("同一個(gè)世界,同一個(gè)夢(mèng)想!"));
...
結(jié)果:
標(biāo)題顯示正常,標(biāo)簽和按鈕的中文都是亂碼。
常用方法總結(jié)如些:
1、使用setDefaultCodec進(jìn)行設(shè)置;
2、 設(shè)置QObject的成員函數(shù)tr()的編碼;
3、使用QString的fromLocal8Bit()函數(shù);
4、用QTextCodec的toUnicode方法來(lái)顯示中文
5...
6、QTextCodec::codecForName(“GBK”)將返回NULL指針。
7、
CODE:
最直接的方法是把整個(gè)應(yīng)用程序的編碼設(shè)置為GBK編碼,然后在字符串這前加tr:
CODE:
qApp->setDefaultCodec(QTextCodec::codecForName("GBK") );
...
QLabel *label = new QLabel(tr("你好,世界!"));
例:
CODE:
#include
#include
#include<qtextcodec.h>
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
app.setDefaultCodec( QTextCodec::codecForName("GBK") );
QLabel label(tr("你好,世界!"), NULL);
app.setMainWidget(&label);
label.show();
return app.exec();
}
如果使QT根據(jù)Locale的環(huán)境變量取得字符集,可以使用如下命令:
QString::fromLocal8Bit("你好,世界!");
例:
CODE:
#include
#include
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
QLabel label(QString::fromLocal8Bit("你好,世界!"), NULL);
app.setMainWidget(&label);
label.show();
return app.exec();
}
-------------------------------------------------------------------------------------------
法二:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
-----------------------------------------------------------------------------------------
法三:可以寫(xiě)個(gè)函數(shù)
QString
{
QGbkCodec* gbk=(QGbkCodec*)QTextCodec::codecForName("GBK");
return gbk->toUnicode(s.latin1(),s.length());
}
調(diào)用下就好
聯(lián)系客服