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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Menu + установка языка  (Прочитано 5800 раз)
ifthl
Гость
« : Июнь 16, 2010, 19:52 »

Вопрос 1 :
В меню для установки языка надо создавать отдельный пункт для каждого(и определить отдельно каждый слот для языка) или можно  QComboBox установить в Menu?
Вопрос 2:

к примеру в файле mainwindow.cpp
есть слот

Код:
void MainWindow::setLanguage(const QString& str)  // Установка языка
{
  

QTranslator * translator = new QTranslator;

translator->load(str,".");

}

Тогда как установить язык ?

если бы мы были в main.cpp

было бы так
Код:
QApplication a(argc, argv);
a.installTranslator(translator);
Сделал вариант с глобальной переменной, но он меня не радует (да и не работает =))
Записан
sendevent
Гость
« Ответ #1 : Июнь 16, 2010, 20:17 »

1. комбобокс, возможно, удастся всунуть в меню через QWidgetAction (а может, и не удастся Подмигивающий).
на мой взгляд, правильнее действительно каждый язык положить отдельной QAction, все присоединить к одному слоту, в котором проверять, хто именно сработал.
2. qApp?
Записан
ufna
Гость
« Ответ #2 : Июнь 17, 2010, 00:28 »

А еще не забыть что для уже созданных виджетов нужно обработать changeEvent(), иначе язык меняться не будет вот хоть убей.

qApp нужно использовать как "глобальную переменную".

А вот комбобоксы в меню - не лучшее решение изначально. Вообще, язык имхо нужно выбирать либо в отдельном окошечке настроек, либо меню где они пойдут списком. А слот можно сделать один, предварительно экшенам задав objectName нужный тебе, а в слоте ловишь кто sender()->objectName() и от этого применяешь нужный язык.
Записан
ifthl
Гость
« Ответ #3 : Июнь 17, 2010, 10:13 »

А еще не забыть что для уже созданных виджетов нужно обработать changeEvent(), иначе язык меняться не будет вот хоть убей.

qApp нужно использовать как "глобальную переменную".

А вот комбобоксы в меню - не лучшее решение изначально. Вообще, язык имхо нужно выбирать либо в отдельном окошечке настроек, либо меню где они пойдут списком. А слот можно сделать один, предварительно экшенам задав objectName нужный тебе, а в слоте ловишь кто sender()->objectName() и от этого применяешь нужный язык.

Буду благодарен если покажите как обработать changeEvent().

qDebug() <<  sender()->objectName();
"" <- выводит это для любого выбора меню

Само меню
Код:
pmenu1->addAction("&Russian",&w,SLOT(setLanguage()));
    pmenu1->addAction("&German",&w,SLOT(setLanguage()));


Записан
ufna
Гость
« Ответ #4 : Июнь 17, 2010, 11:53 »

а ты вначале создай QAction, дай ему objectName, а затем уже пихай в меню

Код
C++ (Qt)
//--------------------------------------------------------------------------------------
void cUPicsMainWindow::changeEvent(QEvent *event)
{
   if (event->type() == QEvent::LanguageChange)
   {
       // Menus
       pMFile->setTitle(tr("&File"));
       pMEdit->setTitle(tr("&Edit"));
 
       // Прочие объекты с tr()
       ...
   }
   else
       QMainWindow::changeEvent(event);
}

И не забудь, что для корректной работы tr() в конструкторах и т.п. не должно быть точно таких же названий. Я обычно делал просто "название" в конструкторах, а в changeEvent() - уже нужные для перевода фразы.
Записан
Kolobok
Гость
« Ответ #5 : Июнь 17, 2010, 12:38 »

Для форм, созданных в дизайнере, не забудь добавить вызов retranslateUi().
Записан
ifthl
Гость
« Ответ #6 : Июнь 17, 2010, 16:41 »

Спс всем за помощь, огорчает что всё так запутанно. И почему у Шлее в примерах всё так хорошо, а как дело доходит до создания классов...
Записан
ufna
Гость
« Ответ #7 : Июнь 17, 2010, 22:37 »

А все элементарно, когда смена языка требует перезапуска. Ведь чаще всего динамической смены языка и не надо - либо определеяем какой язык у юзера на компе и ставим по-умолчанию такой же, либо спрашиваем при запуске. Перезагрузить приложение ради языка - не так уж сложно Улыбающийся
Записан
Kolobok
Гость
« Ответ #8 : Июнь 18, 2010, 00:26 »

Имхо требование перезагрузки при смене языка - вчерашний день. Сейчас это скорее показывает кривые руки (лень) программиста. Тем более, что в Qt это сделать очень просто.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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