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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt linguist and Qt Designer  (Прочитано 12944 раз)
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>

расскажите как решить сей вопрос.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 15, 2012, 22:13 »

устанавливать QTranslator надо до создания каких-либо виджетов, т.е. просто помести строчку ling w; под a.installTranslator (&Trans);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #2 : Август 16, 2012, 06:50 »

Угум. А если хочешь менять на лету - необходимо вызывать ui->retranslateUi(this);
Записан
tiiL
Гость
« Ответ #3 : Август 16, 2012, 13:58 »

Угум. А если хочешь менять на лету - необходимо вызывать ui->retranslateUi(this);

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

У меня получается приложение запускается из другого приложения, и что-то перевод не могу прекрепить, пытаюсь сделать " налету " как вы посоветовали, только не могу понять, у меня приложение запускается и зависает.
Записан
Bepec
Гость
« Ответ #4 : Август 16, 2012, 14:06 »

Ну, я вижу, ты привёл тестовый проект с этой ошибкой. Уж с ним то мы точно покажем наглядно твои ошибки.

О. Не, я неправ. Нету тестового проекта и даже кода нету :/ Ну ничем не могу помочь.
Записан
tiiL
Гость
« Ответ #5 : Август 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();
}


куда мне нужно поместить код с объявлением моих переводов вообще не допру никак
« Последнее редактирование: Август 16, 2012, 15:35 от tiiL » Записан
Bepec
Гость
« Ответ #6 : Август 16, 2012, 15:53 »

Вы в корне не понимаете процесс перевода чоле?

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

PS приду домой сделаю вам тестовый маленький проектик. Но не раньше чем через час-полтора Улыбающийся
Записан
tiiL
Гость
« Ответ #7 : Август 16, 2012, 16:01 »

СПасибо, эти шаги уже известны мне, я вот qm файл не могу подключить к проекту... не могу понять именно как с данным видом проекта.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Август 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();
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
tiiL
Гость
« Ответ #9 : Август 17, 2012, 09:54 »

я может Хреново объясняюсь. Проект ling это промакашка использования переводчика, в посте выше указал проект который не поддается переводу, но проблему нашел с помощью отладчика, когда заходит в функцию retranslateUI (); натыкается на кнопку pushbutton и на этом вылетает программа((( почему тоне создается она
Записан
Bepec
Гость
« Ответ #10 : Август 17, 2012, 10:00 »

Создаётся? оО. Поподробнее что там создаётся, пожалуйста.
Записан
tiiL
Гость
« Ответ #11 : Август 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 и всё вылезает окошко(сообщение): приложение остановлено так каконо получило сигнал от операционной системы
вот не пойму как быть?
Записан
tiiL
Гость
« Ответ #12 : Август 17, 2012, 14:55 »

Всё разобрался! не надо было ui->retranslateUI делать
Записан
Bepec
Гость
« Ответ #13 : Август 17, 2012, 15:01 »

Как обычно - думает что решил проблему Улыбающийся

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

setupUi создаёт UI. А ты вызывал retranslateUi до создания чего либо. Улыбающийся

Руки - хороший инструмент. Только их применять нужно умело Подмигивающий
Записан
tiiL
Гость
« Ответ #14 : Август 17, 2012, 15:31 »

Как обычно - думает что решил проблему Улыбающийся

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

setupUi создаёт UI. А ты вызывал retranslateUi до создания чего либо. Улыбающийся

Руки - хороший инструмент. Только их применять нужно умело Подмигивающий

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

вопрос такой перевожу библиотеку, в нейто как действовать, ?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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