Указание кодировки строк в исходном коде

По умолчанию аргументы функции 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
page_revision: 6, last_edited: 1199729908|%e %b %Y, %H:%M %Z (%O ago)
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License