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


Рис. 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);


<< назад вперед >>