Динамическое переключение языков

Рис. 17.1. Динамическое меню Language
Поскольку мы не знаем, какой язык захочет использовать пользователь после запуска приложения, мы теперь не будем загружать файлы перевода в функции main(). Вместо этого мы будем их загружать динамически по мере необходимости, и поэтому обеспечивающий перевод программный код должен располагаться в классах главного и диалоговых окон.
Давайте рассмотрим подкласс QMainWindow этого приложения:
MainWindow::MainWindow() {
journalView = new JournalView; setCent ralWidget(j ou rnalView);
qApp->installTranslator(&appTranslator);
qApp->installTranslator(&qtTranslator);
qmPath = qApp->applicationDirPath() + "/translations";
createActions(); createMenusO;
retranslateUi();
}
В конструкторе мы устанавливает центральный виджет JournalView как подкласс QTableWidget. Затем мы настраиваем несколько закрытых переменных-членов, имеющих отношение к переводу:
• переменная appTranslator является объектом QTranslator, который используется для хранения текущего перевода приложения;
• переменная qtTranslatoг является объектом QTranslator, который используется для хранения перевода библиотеки Qt;
• переменная qmPat h имеет тип QSt ring и задает путь к каталогу, который содержит файлы перевода приложения.
В конце мы вызываем закрытые функции createActions() и createMenus() для создания системы меню и также закрытую функцию retranslateUi() для первой установки значений видимых пользователем строк.
void MainWindow::createActions() {
newAction = new QAction(this);
connect(newAction, SIGNAL(triggeredO), this, SL0T(newFile())); aboutQtAction = new QAction(this);
connect(aboutQtAction, SIGNAL(triggered()), qApp, SL0T(aboutQt()));
}
Функция createActions() создает объекты QAction как обычно, но без установки текстов пунктов меню и клавиш быстрого вызова команд. Это будет сделано в функции retranslateUi().
void MainWindow::createMenus() {
fileMenu = new QMenu(this); fileMenu->addAction(newAction); fileMenu->addAction(openAction); fileMenu->addAction(saveAction); fileMenu->addAction(exitAction);
createLanguageMenu();
helpMenu = new QMenu(this); helpMenu->addAction(aboutAction); helpMenu->addAction(aboutQtAction);
<< назад вперед >>