Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Bzzzuka от Апрель 03, 2012, 17:52



Название: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 17:52
Есть проблемы с осуществлением динамического перевода, точнее проблема одна - я понятия не имею как это делать. Вот тут накидано что родил мой блондинистый мозг.

создала слот

void MainWindow::SwitchLanguage(int n)
{
    QTranslator translator;

    switch (n) {

    case ui->action_eng->triggered():
        translator.load("eng.qm",".");
        ui.retranslateUi(this);
        break;
    case ui->action_rus->triggered():
        translator.load("rus.qm",".");
        ui.retranslateUi(this);
        break;
    case ui->action_de->triggered():
        translator.load("de.qm",".");
        ui.retranslateUi(this);
        break;
    case ui->action_esp->triggered():
        translator.load("esp.qm",".");
        ui.retranslateUi(this);
        break;
    case ui->action_ch->triggered():
        translator.load("ch.qm",".");
        ui.retranslateUi(this);
        break;
   }

и создала связь
 
    grpAct = new QActionGroup(this);
    grpAct->addAction(ui->action_eng);
    grpAct->addAction(ui->action_de);
    grpAct->addAction(ui->action_rus);
    grpAct->addAction(ui->action_esp);
    grpAct->addAction(ui->action_ch);
    connect(grpAct,SIGNAL(triggered(QAction*)),this,SLOT(SwitchLanguage()));


выдает ошибку

request for member 'retranslateUi' in '((MainWindow*)this)->MainWindow::ui', which is of non-class type 'Ui::MainWindow*


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 18:31
ui.retranslateUi(this);

ui указатель же, вызывать методы надо по стрелке, а не по точке


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 18:34
При нажатии точки он выдает мне вместо нее стрелку и выбор возможных действий


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 18:35
При нажатии точки он выдает мне вместо нее стрелку и выбор возможных действий
круто, потому что "он" (кем бы он ни был) знает что это указатель и использовать нужно не точку, а стрелку... А у тебя точка


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 18:41
ладно эту ошибку я исправила, теперь ему не нравиться

MainWindoW::Ui cannot appear in constant-expression

и еще кучу подобных ошибок



Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 18:42
вероятно нельзя делать так
case ui->action_eng->triggered():

после case должно быть константное целое выражение

В ошибке наверняка указан номер строки, в которой эта ошибка присутствует


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 18:47
ну да ошибки присутствуют в каждой строке.. поэтому наверное нет смысла уточнять в какой именно.


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 18:47
ну да ошибки присутствуют в каждой строке.. поэтому наверное нет смысла уточнять в какой именно.

Первая ошибка присутствовала явно не в каждой строке


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 19:32
void MainWindow::SwitchLanguage()
{
    QTranslator translator;

    if (ui->action_eng) {
        translator.load("eng.qm",".");
        ui->retranslateUi(this); }
            else if (ui->action_rus) {
                translator.load("rus.qm",".");
                ui->retranslateUi(this); }
                    else if(ui->action_de) {
                        translator.load("de.qm",".");
                            ui->retranslateUi(this); }
                            else if(ui->action_esp) {
                                translator.load("esp.qm","."); }
                                    else if (ui->action_ch) {
                                        translator.load("ch.qm",".");
                                        ui->retranslateUi(this);
                                    }



    qApp->installTranslator(&translator);
}


вот последний вариант.. прога компилируется но при выборе языка из выпадающего списка  перевода не происходит..


Название: Re: Динамический перевод
Отправлено: Странник от Апрель 03, 2012, 19:57
хоть так, прости господи..
Код:
void MainWindow::SwitchLanguage(QAction *action)
{
    QTranslator translator;

    if (action == ui->action_eng) translator.load("eng.qm",".");
    else if (action == ui->action_rus) translator.load("rus.qm",".");
    else if (action ==  ui->action_de) translator.load("de.qm",".");
    //и так далее
                            
    qApp->installTranslator(&translator);
    ui->retranslateUi(this);
}
не забудьте коннект исправить:
Код:
connect(grpAct,SIGNAL(triggered(QAction*)),this,SLOT(SwitchLanguage(QAction*)));


Название: Re: Динамический перевод
Отправлено: kambala от Апрель 03, 2012, 20:00
если объект типа QTranslator умирает, то перевод сбрасывается для всех невидимых виджетов, так что лучше его делать полем класса


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 20:08
if (ui->action_eng)
что в твоем понимании должен проверять этот if?


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 20:43
сделала все как сказано все равно не работает

Mutineer, по идее должно быть наверное ui->action_eng->triggered() но Qt на это ошибку выдает


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 20:44
Ну раз ошибку выдает, то ошибку эту надо исправлять


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 20:47
как еще можно заявить произведение действия triggered над action_eng?


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 20:49
triggered() это вообще-то сигнал, что еквивалентно по правилам вызова приватной функции. Намек понятен?


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 20:53
последний вариант

void MainWindow::SwitchLanguage(QAction*)
{
    QTranslator translator;

    if (ui->action_eng->isChecked()) {
        translator.load("eng.qm","."); }
            else if (ui->action_rus->isChecked()) {
                translator.load("rus.qm","."); }
                    else if(ui->action_de->isChecked()) {
                        translator.load("de.qm","."); }
                            else if(ui->action_esp->isChecked()) {
                                translator.load("esp.qm","."); }
                                    else {
                                        translator.load("ch.qm","."); }

    qApp->installTranslator(&translator);
    ui->retranslateUi(this);
}

все равно не работает


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 20:55
Почему никто не обращает внимания на мой аватар(((


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 20:55
последний вариант
Код:
void MainWindow::SwitchLanguage(QAction*)
{
    QTranslator translator;

    if (ui->action_eng->isChecked()) {
        translator.load("eng.qm","."); }
            else if (ui->action_rus->isChecked()) {
                translator.load("rus.qm","."); }
                    else if(ui->action_de->isChecked()) {
                        translator.load("de.qm","."); }
                            else if(ui->action_esp->isChecked()) {
                                translator.load("esp.qm","."); }
                                    else {
                                        translator.load("ch.qm","."); }

    qApp->installTranslator(&translator);
    ui->retranslateUi(this);
}
все равно не работает


Очень грустно, что не работает. возможно, но не точно, ибо мысли я читать почему-то не умею и экран твой тоже не вижу (видать зрение ухудшается) не стоит делать translator локальным в функции


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 20:57
может пришлю на мыло например или через аську а вы посмотрите??? Моя аська 426012470


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 20:57
Почему никто не обращает внимания на мой аватар(((

Ну ты блондинка, поздравляю. Какое отношение цвет волос имеет к коду?


Название: Re: Динамический перевод
Отправлено: V1KT0P от Апрель 03, 2012, 20:59
может пришлю на мыло например или через аську а вы посмотрите??? Моя аська 426012470
Прям здесь проект минимальный прикрепи.


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 21:00
может пришлю на мыло например или через аську а вы посмотрите??? Моя аська 426012470
Прям здесь проект минимальный прикрепи.

Или хотя бы описание что и как не работает. А то "не работает" - может у тебя свет дома выключили, вот и не работает


Название: Re: Динамический перевод
Отправлено: kambala от Апрель 03, 2012, 21:02
чтоб не городить такие лесенки, лучше задать аббревиатуру языков через QAction::setData() где-нибудь в конструкторе, и потом просто делать
Код
C++ (Qt)
translator.load(QString("%1.qm").arg(grpAct->checkedAction()->data().toString()))


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 21:11
Вот проект, не работает перевод.


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 21:13
а я вот люблю лесенки...


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 21:13
Вот проект, не работает перевод.

сделай translator полем класса, а не локальной переменной


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 21:19
Сделала все равно не работает


Название: Re: Динамический перевод
Отправлено: mutineer от Апрель 03, 2012, 21:22
Ну формальные ошибки я тебе помог поправить, а с переводами не работал. Жди другого помощника и кури мануалы по переводу


Название: Re: Динамический перевод
Отправлено: Bepec от Апрель 03, 2012, 21:43
Я бы помог, но без выложенного конечного, исправленного, результата кода, я вам ничем не помогу ;)


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 22:13
еще раз выложить???


Название: Re: Динамический перевод
Отправлено: V1KT0P от Апрель 03, 2012, 22:14
Сделала все равно не работает
Только что скачал и хотел править, но для начала решил удостовериться что правда не работает. Вранье, все работает отлично. Скорее всего ты не туда кладешь файлы с переводом. Если запускаешь из Qt Creator-а то файл должен лежать на одну директорию выше. Или просто скопируй нужные библиотеки в папку с исполняемым файлом и оттуда запусти его вручную.


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 22:29
Видимо я невезучая.. терь пишет
:: error: collect2: ld returned 1 exit status
main.exe не запущен ошибка всего одна


Название: Re: Динамический перевод
Отправлено: V1KT0P от Апрель 03, 2012, 22:31
Видимо я невезучая.. терь пишет
:: error: collect2: ld returned 1 exit status
main.exe не запущен ошибка всего одна
Скорее всего программа запущена или до сих пор висит в памяти, проверь через диспетчер задач.
Также не помешает глянуть в консоль сборки, там может быть более подробное описание ошибки.


Название: Re: Динамический перевод
Отправлено: Bzzzuka от Апрель 03, 2012, 22:36
 :D :D :D :D :D :D :D :D
Все работает!! Оказывается я забыла закоментить не используемый слот в заголовочном...
Мальчики я вас всееееееееееех люблю!!! Спасибки болшушшие!!