Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

Давайте рассмотрим соответствующую часть исходного кода приложения «call center» (центр заказов). Приложение содержит меню Language (язык), чтобы пользователь имел возможность задавать язык во время работы приложения. По умолчанию применяется английский язык.

Рис. 17.1. Динамическое меню Language.

Поскольку мы не знаем, какой язык захочет использовать пользователь после запуска приложения, мы теперь не будем загружать файлы перевода в функции 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"));

11 reportsMenu->setTitle(tr("&Reports"));

12 languageMenu->setTitle(tr("&Language"));

13 helpMenu->setTitle(tr("&Help"));

14 setWindowTitle(tr("Call Center"));

15 }

Именно в функции retranslateUi выполняются все вызовы tr для класса MainWindow. Она вызывается в конце конструктора MainWindow и также при каждом изменении пользователем языка приложения при помощи меню Language.

Мы устанавливаем для каждого пункта меню QAction его текст, клавишу быстрого вызова команды и комментарий в строке состояния. Мы также задаем заголовок окну и каждому меню QMenu.

Поделиться:
Популярные книги

Дважды одаренный. Том IV

Тарс Элиан
4. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
7.00
рейтинг книги
Дважды одаренный. Том IV

Наследство Карны

Вассму Хербьёрг
3. Книга Дины
Проза:
современная проза
5.00
рейтинг книги
Наследство Карны

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

Феномен

Поселягин Владимир Геннадьевич
2. Уникум
Фантастика:
боевая фантастика
6.50
рейтинг книги
Феномен

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9

Кодекс Охотника. Книга XXXVII

Винокуров Юрий
37. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVII

На границе империй. Том 10. Часть 8

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 8

Менталист. Революция

Еслер Андрей
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Менталист. Революция

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Гримуар темного лорда VII

Грехов Тимофей
7. Гримуар темного лорда
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VII

Антимаг

Гедеон Александр и Евгения
1. Антимаг
Фантастика:
фэнтези
6.95
рейтинг книги
Антимаг

Неучтенный элемент. Том 5

NikL
5. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 5

Древесный маг Орловского княжества 10

Павлов Игорь Васильевич
10. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 10