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

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

Жанры

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

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

Шрифт:

CONFIG += assistant

Теперь мы рассмотрим программный код нового класса HelpBrowser, который использует Qt Assistant.

01 #ifndef HELPBROWSER_H

02 #define HELPBROWSER_H

03 class QAssistantClient;

04 class QString;

05 class HelpBrowser

06 {

07 public:

08 static void showPage(const QString &page);

09 private:

10 static QAssistantClient *assistant;

11 };

12 #endif

Ниже

приводится новый файл helpbrowser.cpp:

01 #include <QApplication>

02 #include <QAssistantClient>

03 #include "helpbrowser.h"

04 QAssistantClient *HelpBrowser::assistant = 0;

05 void HelpBrowser::showPage(const QString &page)

06 {

07 QString path = QApplication::applicationDirPath + "/doc/" + page;

08 if (!assistant)

09 assistant = new QAssistantClient("");

10 assistant->showPage(path);

11 }

Конструктор QAssistantClient принимает в качестве своего первого аргумента строку пути, который используется для определения места нахождения исполняемого модуля Qt Assistant. Передавая пустой путь, мы указываем на необходимость QAssistantClient поиска исполняемого модуля в путях переменной среды PATH. QAssistantClient имеет функцию showPage, которая принимает имя файла страницы HTML с необязательным указанием метки позиции.

На следующем этапе необходимо подготовить оглавление и предметный указатель документации. Это выполняется путем создания профиля Qt Assistant и файла .dcf, который содержит сведения о документации. Все это объясняется в документации по Qt Assistant, и поэтому мы не станем здесь повторять эти сведения.

В качестве альтернативы QTextBrowser или Qt Assistant можно спользовать зависящие от платформы методы обеспечения интерактивной помощи. Для приложений Windows можно создать файлы системы помощи Windows HTML Help и обеспечить доступ к ним при помощи Internet Explorer компании Microsoft. Вы могли бы использовать для этого класс Qt QProcess или рабочую среду ActiveQt. Для приложений X11 подходящий метод мог бы состоять в создании файлов HTML и запуске веб-браузера, с использованием QProcess. В Mac OS X подсистема Apple Help предоставляет аналогичные функциональные возможности для Qt Assistant.

На этом мы завершаем часть II. В части III рассматриваются более продвинутые и специализированные средства разработки Qt. Их применение при программировании на С++ вызывает не больше трудностей, чем программирование того, что мы видели в части II, однако некоторые концепции и идеи могут вызвать дополнительные сложности в новых для вас областях.

Часть III. Advanced Qt

Глава 17. Интернационализация

Кроме латинского алфавита, используемого для английского и многих европейских языков, Qt 4 обеспечивает широкую поддержку остальных мировых систем записи:

• Qt применяет Unicode в программном интерфейсе и во внутренних операциях. В приложении можно обеспечить всем пользователям одинаковую поддержку независимо от того, какой язык применяется в пользовательском интерфейсе;

• текстовый процессор Qt может работать со всеми основными нелатинскими системами

записи, в том числе с арабской, китайской, кириллицей, ивритом, японской, корейской, тайской и с языками Индии;

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

• для определенных языков требуются специальные методы ввода текста. Такие виджеты редактирования, как QLineEdit и QTextEdit, хорошо работают в условиях применения любого метода ввода текста, существующего в системе пользователя.

Разрешение ввода текста пользователями на их родном языке часто оказывается недостаточным; необходимо также перевести весь пользовательский интерфейс. В Qt это делается просто: все видимые пользователем строки обработайте функцией tr (как это мы делали в предыдущих главах) и воспользуйтесь утилитами Qt для подготовки файлов перевода на требуемый язык. Qt имеет утилиту с графическим пользовательским интерфейсом, которая называется Qt Linguist и предназначается для переводчиков. Qt Linguist дополняется двумя консольными программами lupdate и lrelease, которые обычно используются разработчиками приложений.

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

Работа с Unicode

Unicode является стандартной кодировкой, которая поддерживает большинство мировых систем записи. В основе кодировки Unicode лежит идея использования для хранения символов 16 бит, а не 8, и поэтому она позволяет закодировать примерно 65 000 символов вместо только 256 [8] . Unicode содержит коды ASCII и ISO 8859-1 (Latin-1) в качестве своего подмножества с прежним их представлением. Например, английская буква «А» имеет значение 0x41 в кодировках ASCII, Latin-1 и Unicode, а буква «В» имеет значение 0xD1 в кодировках Latin-1 и Unicode. Класс Qt QString хранит строковые значения в кодировке Unicode. Каждый символ QString имеет 16-битовый тип QChar, а не 8-битовый тип char. Ниже приводятся два способа установки первого символа строки на значение «А»:

8

Последние версии стандарта Unicode позволяют назначать символам значения, превышающие 65 535. Эти символы можно представить с помощью последовательности из двух 16-битовых значений, называемых «суррогатными парами» (surrogate pairs).

str[0] = 'A';

str[0] = QChar(0x41);

Если исходный файл имеет кодировку Latin-1, задавать символы Latin-1 очень легко:

str[0] = 'C';

Но если исходный файл имеет другую кодировку, хорошо срабатывает вариант с числовым кодом:

str[0] = QChar(0xD1);

Мы можем задать любой символ Unicode с помощью его числового кода. Например, ниже показано, как задается прописная буква «сигма» греческого алфавита («Σ») и символ валюты евро («€»):

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

Демон-хранитель

TsissiBlack
Фантастика:
фэнтези
мистика
5.20
рейтинг книги
Демон-хранитель

Законы рода

Мельник Андрей
1. Граф Берестьев
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Законы рода

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

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

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

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3

Я снова не князь! Книга XVII

Дрейк Сириус
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII

Уникум

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

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

И.Бабель. Воспоминания современников

Паустовский Константин Георгиевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
И.Бабель. Воспоминания современников

Бастард

Майерс Александр
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Первый среди равных. Книга XII

Бор Жорж
12. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга XII

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Лекарь Империи 15

Карелин Сергей Витальевич
15. Лекарь Империи
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
6.80
рейтинг книги
Лекарь Империи 15