По умолчанию аргументы функции tr() воспринимаются в кодировке Latin-1. Для переопределения этого необходимо воспользоваться классом QTextCodec, а именно статической функцией QTextCodec::setCodecForTr().
Так как вызов функции QTextCodec::setCodecForTr() должен быть сделан до первого вызова tr(), то удобнее всего это реализовать сразу после создания объекта QApplication:
#include <QtGui>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec *utfcodec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(utfcodec);
QMainWindow *wnd = new QMainWindow;
QLabel *lb = new QLabel(QObject::tr("Привет, Мир"), wnd);
wnd->show();
return app.exec();
}
Для преобразования строк из локальной кодировки в Unicode снова можно воспользоваться объектом
QTextCodec:
QTextCodec *wincodec = QTextCodec::codecForName("Windows-1251");
QString text = wincodec->toUnicode("тест");
Либо:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
Кодировки, поддерживаемые в Qt 4.3:
- Apple Roman
- Big5
- Big5-HKSCS
- EUC-JP
- EUC-KR
- GB18030-0
- IBM 850
- IBM 866
- IBM 874
- ISO 2022-JP
- ISO 8859-1 — ISO 8859-10
- ISO 8859-13 — ISO 8859-16
- Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
- JIS X 0201
- JIS X 0208
- KOI8-R
- KOI8-U
- MuleLao-1
- ROMAN8
- Shift-JIS
- TIS-620
- TSCII
- UTF-8
- UTF-16
- UTF-16BE
- UTF-16LE
- Windows-1250 — Windows-1258
- WINSAMI2