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

Давайте рассмотрим подкласс QMainWindow этого приложения:

01 MainWindow::MainWindow()

02 {

03 journalView = new JournalView;

04 setCentralWidget(journalView);

05 qApp->installTranslator(&appTranslator);

06 qApp->installTranslator(&qtTranslator);

07 qmPath = qApp->applicationDirPath() + "/translations";

08 createActions();

09 createMenus();

10 retranslateUi();

11 }

В конструкторе мы устанавливает центральный виджет JournalView как подкласс QTableWidget. Затем мы настраиваем несколько закрытых переменных—членов, имеющих отношение к переводу:

• переменная appTranslator является объектом QTranslator, который используется для хранения текущего перевода приложения;

• переменная qtTranslator является объектом QTranslator, который используется для хранения перевода библиотеки Qt;

• переменная qmPath имеет тип QString и задает путь к каталогу, который содержит файлы перевода приложения.

В конце мы вызываем закрытые функции createActions() и createMenus() для создания системы меню и также закрытую функцию retranslateUi() для первой установки значений видимых пользователем строк.

01 void MainWindow::createActions()

02 {

03 newAction = new QAction(this);

04 connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));

05 …

06 aboutQtAction = new QAction(this);

07 connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));

08 }

Функция createActions() создает объекты QAction как обычно, но без установки текстов пунктов меню и клавиш быстрого вызова команд. Это будет сделано в функции retranslateUi().

01 void MainWindow::createMenus()

02 {

03 fileMenu = new QMenu(this);

04 fileMenu->addAction(newAction);

05 fileMenu->addAction(openAction);

06 fileMenu->addAction(saveAction);

07 fileMenu->addAction(exitAction);

08 …

09 createLanguageMenu();

10 helpMenu = new QMenu(this);

11 helpMenu->addAction(aboutAction);

12 helpMenu->addAction(aboutQtAction);

13 menuBar()->addMenu(fileMenu);

14 menuBar()->addMenu(editMenu);

15 menuBar()->addMenu(reportsMenu);

16 menuBar()->addMenu(languageMenu);

17 menuBar()->addMenu(helpMenu);

18 }

Функция createMenus() создает пункты меню, но не устанавливает их текст. И снова это будет сделано в функции retranslateUi().

В середине функции мы вызываем createLanguageMenu() для заполнения меню Language списком поддерживаемых языков. Вскоре мы рассмотрим ее исходный код. Во-первых, давайте рассмотрим функцию retranslateUi():

01 void MainWindow::retranslateUi()

02 {

03 newAction->setText(tr("&New"));

04 newAction->setShortcut(tr("Ctrl+N"));

05 newAction->setStatusTip(tr("Create a new journal"));

06 …

07 aboutQtAction->setText(tr("About &Qt"));

08 aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));

09 fileMenu->setTitle(tr("&File"));

10 editMenu->setTitle(tr("&Edit"));

Перейти на страницу:

Похожие книги