Создаю приложение С++, добавляю в него qml-файл для вывода интерфейса:
#include <QTextCodec>
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP-1251"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("CP-1251"));
MainWindow w;
w.show();
return a.exec();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "mainmodel.h"
#include <QtDeclarative/QtDeclarative>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QDeclarativeView *view = new QDeclarativeView;
setCentralWidget(view);
QDeclarativeEngine *engine = view->engine();
QDeclarativeContext *context = engine->rootContext();
QString fn = "MainWindow.qml";
view->setSource(fn);
view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
}
Rectangle {
id: rectangle1
width: 800
height: 600
Text {
id: text1
text: "Надпись на русском"
font.bold: true
font.family: "Tahoma"
anchors.fill: parent
font.pixelSize: 16
}
}
http://doc.qt.nokia.com/4.7-snapshot/qdeclarativei18n.html
Rectangle {
id: rectangle1
width: 800
height: 600
Text {
id: text1
text: qsTr("Надпись на русском")
font.bold: true
font.family: "Tahoma"
anchors.fill: parent
font.pixelSize: 16
}
}
[/expand (добавил QTranslator)][expand=main.cpp]#include <QTextCodec>
#include <QTranslator>
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP-1251"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("CP-1251"));
QTranslator qtTranslator;
qtTranslator.load(":translations/wc_ru");
a.installTranslator(&qtTranslator);
MainWindow w;
w.show();
return a.exec();
}
Алексей, судя по кодировке вы делаете это под Windows. Попробуйте сделать следующее:
1. Откройте файл MainWindow.qml в qtcreator что бы была возможность редактировать в виде текста
2. Переходим в меню "Правка"->"Выбор кодировки". Принудительно выставляем Utf8
3. Далее стираем русский текст и пишем его заново без всяких qsTr. Теперь qml файл у нас полностью в utf8
4. Компилируем, запускает.
У меня после этого русский текст отобразился правильно. Т.е. отсюда вывод: qml файл должен быть в кодировк utf8
Rectangle {
id: rectangle1
width: 800
height: 600
Text {
id: text1
text: qsTr("translated text")
font.bold: true
font.family: "Tahoma"
anchors.fill: parent
font.pixelSize: 16
}
}
#include <QTextCodec>
#include <QTranslator>
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP-1251"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("CP-1251"));
QTranslator qtTranslator;
qtTranslator.load(":translations/wc_ru");
a.installTranslator(&qtTranslator);
MainWindow w;
w.show();
return a.exec();
}
Алексей, в аттаче рабочий пример, разбирайся.
Единственное замечание по сборке: важно правильное указание путей.
exe, MainWindow.qml и папка i18n должны находиться в одном каталоге, который должен быть назначен как каталог запуска приложения. Об этом придётся позаботиться самому, скопировав, после компиляции, все требуемые файлы в одно место.
Надеюсь понятно объяснил
Насколько заметил в креаторе есть баг с русским буквами (необходимо каждый раз перегружать файл в UTF-8 после первого открытия его в дизайнере в сессии), так что если кто заинтересован поддержим:
http://bugreports.qt.nokia.com/browse/QTCREATORBUG-4040
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)