QT 4: программирование GUI на С++
Шрифт:
Давайте рассмотрим соответствующую часть исходного кода приложения «call center» (центр заказов). Приложение содержит меню Language (язык), чтобы пользователь имел возможность задавать язык во время работы приложения. По умолчанию применяется английский язык.
Рис. 17.1. Динамическое меню Language.
Поскольку мы не знаем, какой язык захочет использовать пользователь после запуска приложения, мы теперь не будем загружать файлы перевода в функции main. Вместо
Давайте рассмотрим подкласс QMainWindow этого приложения:
В конструкторе мы устанавливает центральный виджет JournalView как подкласс QTableWidget. Затем мы настраиваем несколько закрытых переменных—членов, имеющих отношение к переводу:
• переменная appTranslator является объектом QTranslator, который используется для хранения текущего перевода приложения;
• переменная qtTranslator является объектом QTranslator, который используется для хранения перевода библиотеки Qt;
• переменная qmPath имеет тип QString и задает путь к каталогу, который содержит файлы перевода приложения.
В конце мы вызываем закрытые функции createActions и createMenus для создания системы меню и также закрытую функцию retranslateUi для первой установки значений видимых пользователем строк.
Функция createActions создает объекты QAction как обычно, но без установки текстов пунктов меню и клавиш быстрого вызова команд. Это будет сделано в функции retranslateUi.
Функция createMenus
В середине функции мы вызываем createLanguageMenu для заполнения меню Language списком поддерживаемых языков. Вскоре мы рассмотрим ее исходный код. Во-первых, давайте рассмотрим функцию retranslateUi:
Именно в функции retranslateUi выполняются все вызовы tr для класса MainWindow. Она вызывается в конце конструктора MainWindow и также при каждом изменении пользователем языка приложения при помощи меню Language.
Мы устанавливаем для каждого пункта меню QAction его текст, клавишу быстрого вызова команды и комментарий в строке состояния. Мы также задаем заголовок окну и каждому меню QMenu.