Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: tiiL от Август 15, 2012, 16:12



Название: Qt linguist and Qt Designer
Отправлено: tiiL от Август 15, 2012, 16:12
Приветствую всех:
Вопрос такой:

Осваиваю Linguist, но не получается подключить переводы к кнопкам, созданным в designer'e, простое у меня приложение:
#include <QtGui/QApplication>
#include "ling.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ling w;

    QTranslator Trans;
    Trans.load ("ling_ru");
    a.installTranslator (&Trans);
    w.show();

    return a.exec();
}

#include "ling.h"
#include "ui_ling.h"

ling::ling(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ling)
{
    ui->setupUi(this);
}

ling::~ling()
{
    delete ui;
}

void ling::on_enterButton_clicked()
{
    ui->lineEdit->setText (tr("hello"));
}
текст файла _ru.ts:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="ru_RU">
<context>
    <name>ling</name>
    <message>
        <location filename="ling.ui" line="14"/>
        <location filename="ui_ling.h" line="55"/>
        <source>ling</source>
        <translation>Лингвист</translation>
    </message>
    <message>
        <location filename="ling.ui" line="27"/>
        <location filename="ui_ling.h" line="56"/>
        <source>enter</source>
        <translation>Вход</translation>
    </message>
    <message>
        <location filename="ling.cpp" line="18"/>
        <source>hello</source>
        <translation>Привет</translation>
    </message>
</context>
</TS>

расскажите как решить сей вопрос.


Название: Re: Qt linguist and Qt Designer
Отправлено: kambala от Август 15, 2012, 22:13
устанавливать QTranslator надо до создания каких-либо виджетов, т.е. просто помести строчку ling w; под a.installTranslator (&Trans);


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 16, 2012, 06:50
Угум. А если хочешь менять на лету - необходимо вызывать ui->retranslateUi(this);


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 16, 2012, 13:58
Угум. А если хочешь менять на лету - необходимо вызывать ui->retranslateUi(this);

Не очень понял как пользоваться этим.

У меня получается приложение запускается из другого приложения, и что-то перевод не могу прекрепить, пытаюсь сделать " налету " как вы посоветовали, только не могу понять, у меня приложение запускается и зависает.


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 16, 2012, 14:06
Ну, я вижу, ты привёл тестовый проект с этой ошибкой. Уж с ним то мы точно покажем наглядно твои ошибки.

О. Не, я неправ. Нету тестового проекта и даже кода нету :/ Ну ничем не могу помочь.


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 16, 2012, 15:28
Ну, я вижу, ты привёл тестовый проект с этой ошибкой. Уж с ним то мы точно покажем наглядно твои ошибки.

О. Не, я неправ. Нету тестового проекта и даже кода нету :/ Ну ничем не могу помочь.

Вот *.h
Код:
class FormBlock: public QDialog, public Ui::ProcessForm {
Q_OBJECT
public:
    FormBlock(QWidget *parent = 0, const char *name = 0);

public slots:
    virtual void buttonCancel_clicked();
    virtual void buttonOk_clicked();
 };

extern FormBlock *blockForm;


main.cpp^
Код:
int main(int argc, char *argv[])
{
    QApplication a( argc, argv );
 blockForm = new FormBlock();
!!!!!!!!!код программы...!!!!!!!!
 delete blockForm;
return EXIT_SUCCESS;
другой.cpp
Код:
FormBlock *blockForm;

FormBlock::FormBlock(QWidget *parent, const char *name)
    :QDialog(parent)
{
    setupUi(this);    
}

void FormBlock::buttonOk_clicked()
{
accept();
}

void FormBlock::buttonCancel_clicked()
{
reject();
}


куда мне нужно поместить код с объявлением моих переводов вообще не допру никак


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 16, 2012, 15:53
Вы в корне не понимаете процесс перевода чоле?

Вам нужно в коде программы устанавливать строки с tr().
Потом пропустить проект через лингвист (ну или lupdate).
Получите *.ts
Далее в лингвисте(или блокноте) перевести строки.
Далее зарелизить в лингвисте(ну или lrelease).
Вы получите qm файлик, который и загружается в транслятор.

PS приду домой сделаю вам тестовый маленький проектик. Но не раньше чем через час-полтора :)


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 16, 2012, 16:01
СПасибо, эти шаги уже известны мне, я вот qm файл не могу подключить к проекту... не могу понять именно как с данным видом проекта.


Название: Re: Qt linguist and Qt Designer
Отправлено: kambala от Август 16, 2012, 16:26
Угум. А если хочешь менять на лету - необходимо вызывать ui->retranslateUi(this);
У меня получается приложение запускается из другого приложения, и что-то перевод не могу прекрепить, пытаюсь сделать " налету " как вы посоветовали, только не могу понять, у меня приложение запускается и зависает.
подозреваю, что в таком случае файл ling_ru.qm ищется в папке приложения-родителя (она ведь является текущей), а не в папке-ребёнка. попробуй загружать так:
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
 
   QTranslator Trans;
   Trans.load (a.applicationDirPath() + "/ling_ru.qm");
   a.installTranslator (&Trans);
 
   ling w;
   w.show();
 
   return a.exec();
}


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 17, 2012, 09:54
я может Хреново объясняюсь. Проект ling это промакашка использования переводчика, в посте выше указал проект который не поддается переводу, но проблему нашел с помощью отладчика, когда заходит в функцию retranslateUI (); натыкается на кнопку pushbutton и на этом вылетает программа((( почему тоне создается она


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 17, 2012, 10:00
Создаётся? оО. Поподробнее что там создаётся, пожалуйста.


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 17, 2012, 10:14
короче только попробовал сделать вот так:
Код:
FormBlock::FormBlock(QWidget *parent, const char *name)
    :QDialog(parent)
{
    QTranslator blockTrans;
    blockTrans.load("block_ru");
    qApp->installTranslator (&blockTrans);
    blockForm->retranslateUi (this);
    setupUi(this);   
}
при переходе в retranslateUi (this);
Код:
 void retranslateUi(QDialog *ProcessForm)
    {
        ProcessForm->setWindowTitle(QApplication::translate("ProcessForm", "Process", 0, QApplication::UnicodeUTF8));
        groupBox2->setTitle(QString());
        textLabel1_2_2_2->setText(QApplication::translate("ProcessForm", "flights", 0, QApplication::UnicodeUTF8));
        textLabel1_2_2_2_2->setText(QApplication::translate("ProcessForm", "reversals", 0, QApplication::UnicodeUTF8));
        textLabel1_2_2_2_3->setText(QApplication::translate("ProcessForm", "flights", 0, QApplication::UnicodeUTF8));
 }
ProcessForm форм отладчик прозходит до testLabel1 и всё вылезает окошко(сообщение): приложение остановлено так каконо получило сигнал от операционной системы
вот не пойму как быть?


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 17, 2012, 14:55
Всё разобрался! не надо было ui->retranslateUI делать


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 17, 2012, 15:01
Как обычно - думает что решил проблему :)

А проблема у тебя на самом деле была в тебе.

setupUi создаёт UI. А ты вызывал retranslateUi до создания чего либо. :)

Руки - хороший инструмент. Только их применять нужно умело ;)


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 17, 2012, 15:31
Как обычно - думает что решил проблему :)

А проблема у тебя на самом деле была в тебе.

setupUi создаёт UI. А ты вызывал retranslateUi до создания чего либо. :)

Руки - хороший инструмент. Только их применять нужно умело ;)

Заметил))) уколол))) все проблемы в голове.

вопрос такой перевожу библиотеку, в нейто как действовать, ?


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 17, 2012, 15:36
Какую библиотеку? подробнее пож.


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 17, 2012, 15:52
Какую библиотеку? подробнее пож.

CONFIG += staticlib
То есть там только описания функций + диологи. вот в предыдущих проектах я в тело main производит загрузку переводо, а теперь то где сие счастье сделать?


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 17, 2012, 17:04
А что мешает запихать файлы переводов в ресурсы?


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 20, 2012, 07:53
А что мешает запихать файлы переводов в ресурсы?


вот на этот вопрос, я могу ответить, я не умею... сколько не пытался(((


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 20, 2012, 08:26
Пользуешься, по всей видимости QtCreator'ом? :)

Тогда тут я не помощник. Я его открыл, попытался собрать hello world, не смог - закрыл :D


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 20, 2012, 08:43
вот в этом то и вся проблема


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 20, 2012, 08:51
Но эта тема уже вроде разжёвана до кашки - включи поиск по форуму и просветляйся.

PS а я бы посоветовал переходить на Visual Stidio + Qt Addin. Гораздо удобнее QtCreator'a, хотя и свои заморочки есть :)


Название: Re: Qt linguist and Qt Designer
Отправлено: tiiL от Август 20, 2012, 09:33
ТУт много подводных камней, по которым я не имею права менять средУ


Название: Re: Qt linguist and Qt Designer
Отправлено: Bepec от Август 20, 2012, 09:50
Не верю, но не буду добивать :D

PS поиск по форуму рулит всё таки ;)