Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Mirael Karamir от Январь 05, 2007, 11:13



Название: Помогите разобратся с tr()
Отправлено: Mirael Karamir от Январь 05, 2007, 11:13
помогите пожайлуста новичку разобратся с работой этой функции.  проблема возникла в следующем - когда создаешь собственный класс, который наследует QWidget, не удается добится, что бы работал перевод элементов виджета, хотя бы в вот таком простом примере
 
Код:

mywidget.h

#include <QWidget>
class QPushButton;

class MyWidget : public QWidget
{
Q_OBJECT

public:
MyWidget(QWidget *parent = 0);
private:
QPushButton *reloadButton;
QPushButton *exitButton;
}
;
----------------------------------------------------------------------------
mywdiget.cpp

#include <QApplication>
#include <QtGui>
#include "mywidget.h"
 MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
 {
reloadButton = new QPushButton(tr("Reload"),this);
exitButton = new QPushButton(tr("Exit"),this);
QVBoxLayout *buttonLayout = new QVBoxLayout(this);
buttonLayout->addWidget(reloadButton);
buttonLayout->addWidget(exitButton);

setLayout(buttonLayout);

connect(exitButton, SIGNAL(clicked()), this, SLOT(close()));

 }

int main (int argc, char **argv)
{
QApplication app(argc,argv);
MyWidget win;
QTranslator translator;
     translator.load("test.qm");
     app.installTranslator(&translator);
win.show();
return app.exec();
};

--------------------------------------------------



Читал и ассистант, и Бланшет, но внятного ответа, как сделать так, что бы это работало, так и не нашел. Для очищения совести пробовал и другие варианты - наподобие QPushButton::tr, QObject::tr, MyWidget::tr, однако результат тот же. Qt версии 4.2.2 OpenSource (Linux и Windows версии). В Qt 4.1.* таких проблем вроде бы не было. Может знает кто нибудь, что я делаю не так? Заранее спасибо за помощь.


Название: Помогите разобратся с tr()
Отправлено: bigirbis от Январь 05, 2007, 11:40
1. lupdate (обновление файла перевода)
2. правка файла перевода в текстовом редакторе или Лингвисте
3. lrelease (компиляция файла перевода. получившийся файл должен лежать в рабочем каталоге запускаемого файла)


Название: Помогите разобратся с tr()
Отправлено: Mirael Karamir от Январь 05, 2007, 11:52
Спасибо, я это все конешно делал :) Все нормально перевел, сделал lrelease? Однако все равно отображаются английские надписи на кнопках

добавлено спустя 2 минуты:

 Проблема возникла у меня ИМЕННО с QT 4.2.2, раньше мне уже неоднократно приходилось делать подобные вещи c более ранними версиями Qt и проблем не было.


Название: Помогите разобратся с tr()
Отправлено: bigirbis от Январь 05, 2007, 12:07
Я попробовал, у тебя проблема с 3 пунктом (смотри в скобках)!


Название: Помогите разобратся с tr()
Отправлено: Mirael Karamir от Январь 05, 2007, 12:15
Да нет, все там нормально... там все файлы в одном каталоге

добавлено спустя 41 секунду:

 И что, у тебя получилось? А Qt у тебя какой версии?


Название: Помогите разобратся с tr()
Отправлено: bigirbis от Январь 05, 2007, 12:16
"В одном каталоге" и "в рабочем каталоге" - разные вещи...


Название: Помогите разобратся с tr()
Отправлено: Mirael Karamir от Январь 05, 2007, 12:23
К тому же, этот пример - слегка модифицированный Туториал 4 из Ассистанта (что бы не лепить сюда сотни строчек кода). В реальной проге, в которой я столкнулся с этой проблемой, было немного сложнее - переводилась нормально лишь чать интерфейса, например QMessageBox-ы , положенный на форму QTreeWidget, а вот с кнопками и менюшками QMenu возникла точно такая же трабла, к и в примере выше. Так что тут проблема в чем то другом, а не в файле переводов :)

добавлено спустя 3 минуты:

 Что бы у тебя не возникало сомнений по этому поводу, я пробовал и такой вариант
if(!translator.load("test.qm")){abort();}

Программа выполнялась нормально, то есть файл переводов грузился.


Название: Помогите разобратся с tr()
Отправлено: Dendy от Январь 05, 2007, 13:24
Дружище, всмотрись в СВОЙ код. Сначала у тебя идет конструктор MyWidget, в котором создаются кнопки с текстом на них. Откуда берется переведенньІй текст? Правильно - НИОТКУДА. Потому что транслятор еще не установлен. А устанавливаешь тьІ его ПОСЛЕ конструктора MyWidget.

Код:
int main (int argc, char **argv) 
{
   QApplication app(argc,argv);
   QTranslator translator;
     translator.load("test.qm");
     app.installTranslator(&translator);
   MyWidget win;
   win.show();
   return app.exec();
};


Название: Помогите разобратся с tr()
Отправлено: Mirael Karamir от Январь 05, 2007, 13:38
хм... Твоя правда... Твои советы всегда в тему :) Спасиб :)