Russian Qt Forum
Ноябрь 23, 2024, 06:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобратся с tr()  (Прочитано 6041 раз)
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.* таких проблем вроде бы не было. Может знает кто нибудь, что я делаю не так? Заранее спасибо за помощь.
Записан
bigirbis
Гость
« Ответ #1 : Январь 05, 2007, 11:40 »

1. lupdate (обновление файла перевода)
2. правка файла перевода в текстовом редакторе или Лингвисте
3. lrelease (компиляция файла перевода. получившийся файл должен лежать в рабочем каталоге запускаемого файла)
Записан
Mirael Karamir
Гость
« Ответ #2 : Январь 05, 2007, 11:52 »

Спасибо, я это все конешно делал Улыбающийся Все нормально перевел, сделал lrelease? Однако все равно отображаются английские надписи на кнопках

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

 Проблема возникла у меня ИМЕННО с QT 4.2.2, раньше мне уже неоднократно приходилось делать подобные вещи c более ранними версиями Qt и проблем не было.
Записан
bigirbis
Гость
« Ответ #3 : Январь 05, 2007, 12:07 »

Я попробовал, у тебя проблема с 3 пунктом (смотри в скобках)!
Записан
Mirael Karamir
Гость
« Ответ #4 : Январь 05, 2007, 12:15 »

Да нет, все там нормально... там все файлы в одном каталоге

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

 И что, у тебя получилось? А Qt у тебя какой версии?
Записан
bigirbis
Гость
« Ответ #5 : Январь 05, 2007, 12:16 »

"В одном каталоге" и "в рабочем каталоге" - разные вещи...
Записан
Mirael Karamir
Гость
« Ответ #6 : Январь 05, 2007, 12:23 »

К тому же, этот пример - слегка модифицированный Туториал 4 из Ассистанта (что бы не лепить сюда сотни строчек кода). В реальной проге, в которой я столкнулся с этой проблемой, было немного сложнее - переводилась нормально лишь чать интерфейса, например QMessageBox-ы , положенный на форму QTreeWidget, а вот с кнопками и менюшками QMenu возникла точно такая же трабла, к и в примере выше. Так что тут проблема в чем то другом, а не в файле переводов Улыбающийся

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

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

Программа выполнялась нормально, то есть файл переводов грузился.
Записан
Dendy
Гость
« Ответ #7 : Январь 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();
};
Записан
Mirael Karamir
Гость
« Ответ #8 : Январь 05, 2007, 13:38 »

хм... Твоя правда... Твои советы всегда в тему Улыбающийся Спасиб Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.