crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Использование русской кодировки в QML-файлах для проекта на C++
Алексей
  опции профиля:
сообщение 16.1.2011, 13:32
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 29.8.2010
Пользователь №: 1988

Спасибо сказали: 0 раз(а)




Репутация:   0  


Создаю приложение С++, добавляю в него qml-файл для вывода интерфейса:

main.cpp
#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();
}
mainwindow.h
#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
mainwindow.cpp
#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);
}
MainWindow.qml
Rectangle {
    id: rectangle1
    width: 800
    height: 600
    Text {
        id: text1
        text: "Надпись на русском"
        font.bold: true
        font.family: "Tahoma"
        anchors.fill: parent
        font.pixelSize: 16
    }
}


В результате получаю набор квадратиков в место надписи на русском, поэтому хотел узнать как использовать qml файлы с русским интерфейсом и вслучае необходимости интернационализировать их - tr() в них у меня не получилось использовать. Единственный способ который я пока нашёл чтобы выводить в qml русские надписи - это выводить их через параметры - но это довольно трудоёмкое занятие и для некоторых программ которые не будут интернализироваться не имеет никакого смысла, поэтому хотелось бы узнать способ использовать русские символы в самом qml.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 16.1.2011, 14:30
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


http://doc.qt.nokia.com/4.7-snapshot/qdeclarativei18n.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей
  опции профиля:
сообщение 16.1.2011, 16:48
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 29.8.2010
Пользователь №: 1988

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 16.1.2011, 16:30) *


не могу разобраться на какой объект и как нужно установить перевод (на само приложение перевод устанавливается и тестовые MessageBox появляются переведёнными), но вот окно из qml файла остаётся непереведённым

MainWindow.qml (добавил qsTr)
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();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2011, 18:23
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей @ 16.1.2011, 18:48) *
но вот окно из qml файла остаётся непереведённым
а на какой язык ты переводил его?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 16.1.2011, 19:58
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Алексей, судя по кодировке вы делаете это под Windows. Попробуйте сделать следующее:
1. Откройте файл MainWindow.qml в qtcreator что бы была возможность редактировать в виде текста
2. Переходим в меню "Правка"->"Выбор кодировки". Принудительно выставляем Utf8
3. Далее стираем русский текст и пишем его заново без всяких qsTr. Теперь qml файл у нас полностью в utf8
4. Компилируем, запускает.

У меня после этого русский текст отобразился правильно. Т.е. отсюда вывод: qml файл должен быть в кодировк utf8
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей
  опции профиля:
сообщение 18.1.2011, 19:19
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 29.8.2010
Пользователь №: 1988

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 16.1.2011, 20:23) *
Цитата(Алексей @ 16.1.2011, 18:48) *
но вот окно из qml файла остаётся непереведённым
а на какой язык ты переводил его?

извеняюсь (поправить сейчас никак) я сюда скопировал безумный вариант перевода с русского на русский, который родился в безуспешных попытках)

но вообще переводил с английского на русский

Цитата(igor_bogomolov @ 16.1.2011, 21:58) *
Алексей, судя по кодировке вы делаете это под Windows. Попробуйте сделать следующее:
1. Откройте файл MainWindow.qml в qtcreator что бы была возможность редактировать в виде текста
2. Переходим в меню "Правка"->"Выбор кодировки". Принудительно выставляем Utf8
3. Далее стираем русский текст и пишем его заново без всяких qsTr. Теперь qml файл у нас полностью в utf8
4. Компилируем, запускает.

У меня после этого русский текст отобразился правильно. Т.е. отсюда вывод: qml файл должен быть в кодировк utf8


Большое спасибо! заработало (и да под виндос)

ПС но вот с интернализацией qml через С++ проблемы не решились даже с utf-8, поправил:

MainWindow.qml (добавил qsTr)
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
    }
}
main.cpp (добавил QTranslator)
#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();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.1.2011, 19:53
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей @ 18.1.2011, 21:19) *
qsTr("translated text")
Цитата(Алексей @ 18.1.2011, 21:19) *
QTextCodec::setCodecForTr(QTextCodec::codecForName("CP-1251"));
текст в QML-е в UTF-8 (если я правильно понимаю), а текстовыц кодек установлен в CP-1251.
Посмотри в асистенте: распространяется ли действие setCodecForTr на QML?
Если да, то причина понятна, если нет, то возможно там свой способ указания есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 18.1.2011, 22:12
Сообщение #8


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Алексей, в аттаче рабочий пример, разбирайся.
Единственное замечание по сборке: важно правильное указание путей.
exe, MainWindow.qml и папка i18n должны находиться в одном каталоге, который должен быть назначен как каталог запуска приложения. Об этом придётся позаботиться самому, скопировав, после компиляции, все требуемые файлы в одно место.
Надеюсь понятно объяснил :)
Прикрепленные файлы
Прикрепленный файл  qml_test.zip ( 2.49 килобайт ) Кол-во скачиваний: 157
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей
  опции профиля:
сообщение 15.3.2011, 12:17
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 29.8.2010
Пользователь №: 1988

Спасибо сказали: 0 раз(а)




Репутация:   0  


Насколько заметил в креаторе есть баг с русским буквами (необходимо каждый раз перегружать файл в UTF-8 после первого открытия его в дизайнере в сессии), так что если кто заинтересован поддержим:
http://bugreports.qt.nokia.com/browse/QTCREATORBUG-4040
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.1.2020, 10:07