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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Динамический перевод  (Прочитано 14263 раз)
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*
Записан
mutineer
Гость
« Ответ #1 : Апрель 03, 2012, 18:31 »

ui.retranslateUi(this);

ui указатель же, вызывать методы надо по стрелке, а не по точке
« Последнее редактирование: Апрель 03, 2012, 18:36 от mutineer » Записан
Bzzzuka
Гость
« Ответ #2 : Апрель 03, 2012, 18:34 »

При нажатии точки он выдает мне вместо нее стрелку и выбор возможных действий
Записан
mutineer
Гость
« Ответ #3 : Апрель 03, 2012, 18:35 »

При нажатии точки он выдает мне вместо нее стрелку и выбор возможных действий
круто, потому что "он" (кем бы он ни был) знает что это указатель и использовать нужно не точку, а стрелку... А у тебя точка
Записан
Bzzzuka
Гость
« Ответ #4 : Апрель 03, 2012, 18:41 »

ладно эту ошибку я исправила, теперь ему не нравиться

MainWindoW::Ui cannot appear in constant-expression

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

Записан
mutineer
Гость
« Ответ #5 : Апрель 03, 2012, 18:42 »

вероятно нельзя делать так
case ui->action_eng->triggered():

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

В ошибке наверняка указан номер строки, в которой эта ошибка присутствует
Записан
Bzzzuka
Гость
« Ответ #6 : Апрель 03, 2012, 18:47 »

ну да ошибки присутствуют в каждой строке.. поэтому наверное нет смысла уточнять в какой именно.
Записан
mutineer
Гость
« Ответ #7 : Апрель 03, 2012, 18:47 »

ну да ошибки присутствуют в каждой строке.. поэтому наверное нет смысла уточнять в какой именно.

Первая ошибка присутствовала явно не в каждой строке
Записан
Bzzzuka
Гость
« Ответ #8 : Апрель 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);
}


вот последний вариант.. прога компилируется но при выборе языка из выпадающего списка  перевода не происходит..
Записан
Странник
Гость
« Ответ #9 : Апрель 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*)));
« Последнее редактирование: Апрель 03, 2012, 19:59 от Странник » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Апрель 03, 2012, 20:00 »

если объект типа QTranslator умирает, то перевод сбрасывается для всех невидимых виджетов, так что лучше его делать полем класса
« Последнее редактирование: Апрель 03, 2012, 20:02 от kambala » Записан

Изучением 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
mutineer
Гость
« Ответ #11 : Апрель 03, 2012, 20:08 »

if (ui->action_eng)
что в твоем понимании должен проверять этот if?
Записан
Bzzzuka
Гость
« Ответ #12 : Апрель 03, 2012, 20:43 »

сделала все как сказано все равно не работает

Mutineer, по идее должно быть наверное ui->action_eng->triggered() но Qt на это ошибку выдает
Записан
mutineer
Гость
« Ответ #13 : Апрель 03, 2012, 20:44 »

Ну раз ошибку выдает, то ошибку эту надо исправлять
Записан
Bzzzuka
Гость
« Ответ #14 : Апрель 03, 2012, 20:47 »

как еще можно заявить произведение действия triggered над action_eng?
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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