Жасмин Бланшет

Книги → QT 4: программирование GUI на С++ → Динамическое переключение языков

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

Обеспечение в приложении возможности динамического переключения языков требует немного большего, чем просто загрузка одного файла перевода при запуске приложения, но это нетрудно сделать.

Порядок действий должен быть следующим:

• предусмотрите средство, с помощью которого пользователь сможет переключаться с одного языка на другой;

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

Давайте рассмотрим соответствующую часть исходного кода приложения «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().

← предущий раздел следующая →

Страницы раздела: 1 2 3 4

Публикация компанией Dropbox кода Zulip – средства общения для IT-разработчиков

20.11.2015
Одной из одобрительно встреченных программистами инициатив, реализующихся в рамках акции Hack Week, стала публикация исходного кода приложения Zulip – веб-приложения для общения между собой разработчиков в сфере IT-технологий.

Объединение ОС Android и Chrome

17.11.2015
Слухи об объединении двух крупнейших ОС компании Google, Android и Chrome, гуляют по Интернету уже более 5 лет, но до сих пор этого не случилось, хотя очевидно, что с течением времени эти ОС становятся всё более похожими: так, в последнее время появилось немало Android-устройств, к которым прилагаются клавиатуры, а Chrome OS «научилась» работать с сенсорными экранами.

Конференция Linux Piter 2015

15.11.2015
Уже почти через неделю в Санкт-Петербурге впервые в истории пройдёт конференция, посвящённая проблемам свободного программного обеспечения – Linux Piter 2015.