关于qt国际化

qt对国际化有很好的支持。但默认的是unicode编码。中文系统下默认的并非unicode,
而是比如gbk或gb2312。所以在进行const char*参数传递和显示时必须特别注意。
比如在默认情况下
QMessageBox::information(this, "Test", "这是一个测试");
中文字符无法正确显式
又如
bool connect(const char * connectString);
你如果输入
QString str("一个测试");
connect((const char*)str);
默认是调用QString.latin1()方法,是直接从Unicode的QString返回latin-1字符表示
集。在中文系统下有时不是你想要的。
解决方案:在main.cpp里增加
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
这时涉及到QString/QCString到const char*的转换将使用本地的编码集。
类似的还有setCodecForTr()方法。

NOTE: 这跟qt使用unicode进行内部通讯、显示并不冲突。当显示一个const char*时,
qt会将const char*再行转成unicode。

1 thought on “关于qt国际化

  1. 立刚

    我在main中加了: QGb18030Codec* pCodec = new QGb18030Codec(); QGb18030Codec& codec = *pCodec; QTextCodec::setCodecForLocale(&codec); QTextCodec::setCodecForTr(&codec);有个函数 get( const qstring str),如果传递参数是中文的话,还是出错,能不能指点一下,[email protected]

    Reply

Leave a Reply

Your email address will not be published.