Глава 16. Разработка справочной системы приложения.

Большинство приложений включают в себя справочную систему. В некоторых случаях она ограничивается предоставлением всплывающих подсказок, подсказок, выводимых в строке состояния справки типа: "What's This?" ("Что это?"). Qt полностью поддерживает отображение справочной информации такого рода. В других приложениях объем справочной информации может быть очень велик и содержать огромное количество текста. Для отображения такого рода справочной информации можно использовать компонент QTextBrowser, а можно воспользоваться услугами Qt Assistant или любого другого обозревателя HTML-страниц.

16.1. Всплывающие подсказки и справка "What's This?".

Всплывающие подсказки -- это небольшие текстовые сообщения, которые появляются на экране, когда указатель мыши останавливается над виджетом на некоторое время. Текст таких подсказок выводится черным шрифтом на желтом фоне. Изначально всплывающие подсказки предназначались для того, чтобы дать краткое описание кнопок на панели инструментов. Однако мы можем добавить всплывающие подсказки к любому из виджетов. Например:

QToolTip::add(findButton, tr("Find next")); Чтобы добавить подсказку к кнопке в панели инструментов, которой соответствует объект QAction, можно просто вызвать метод setToolTip() требуемого объекта QAction: newAct = new QAction(tr("&New"), tr("Ctrl+N"), this); newAct->setToolTip(tr("New file")); Если текст подсказки не установить явно, он будет сгенерирован автоматически, из текста, заданного при создании объекта, и горячей комбинации клавиш, например "New (Ctrl+N)".

Подсказка в строке состояния -- это небольшой по объему текст, обычно немного больше, чем текст всплывающей подсказки, который отображается в строке состояния приложения. Для добавления такого текста нужно вызвать функцию setStatusTip():

newAct->setStatusTip(tr("Create a new file")); При отсутствии текста подсказки для строки состояния, QAction будет использовать текст всплывающей подсказки.

Для других виджетов необходимо передать в функцию QToolTip::add(), третьим и четвертым аргументами, объект класса QToolTipGroup и текст подсказки:

QToolTip::add(findButton, tr("Find next"), toolTipGroup, tr("Find the next occurrence of the search text"));

Рисунок 16.1. Приложение, отображающее всплывающую подсказку и подсказку в строке состояния.


В визуальном построителе Qt Designer текст подсказок можно задать через свойства виджета toolTip и statusTip.

В некоторых случаях возникает необходимость в предоставлении большего количества справочной информации о виджете, чем это может уместиться в подсказки. Например, у нас может появиться желание добавить более подробный текст описания для каждого из полей в сложном диалоге, не заставляя при этом пользователя вызывать отдельное окно с текстом справки. Идеальное решение в этом случае -- использование режима "What's This?" ("Что это?"). Когда окно приложения переводится в этот режим, указатель мыши приобретает вид -- , и пользователь может щелкнуть мышью по любому элементу интерфейса, чтобы получить дополнительную справку. Чтобы перевести окно в режим "What's This?", пользователь должен либо щелкнуть по кнопке "?", расположенной в заголовке окна, либо нажать комбинацию клавиш Shift+F1.

Текст справки может быть зада вызовом QWhatsThis::add(). Например:

QWhatsThis::add(sourceLineEdit, tr("<img src=\"icon.png\">" "&nbsp;The meaning of the Source field depends on the " "Type field:" "<ul>" "<li><b>Books</b> have a Publisher</li>" "<li><b>Articles</b> have a Journal name with volume and " "issue number</li>" "<li><b>Thesis</b> have an Institution name and a " "department name</li>" "</ul>")); Здесь, как и во многих других виджетах Qt, мы можем форматировать текст подсказки с помощью HTML-тегов. В этом примере мы добавили рисунок в текст подсказки (который описан в разделе IMAGE, в файле .pro), список сделали маркированным, а некоторые слова выделили жирным шрифтом. Теги HTML, которые поддерживает Qt, перечислены в описании класса QStyleSheet.

Рисунок 16.2. Диалог, отображающий текст подсказки "What's This?".


Текст подсказки "What's This?" может быть задан и для объектов QAction: openAct->setWhatsThis(tr("<img src=open.png>&nbsp;" "Click this option to open an " "existing file.")); Текст подсказки будет отображаться после щелчка мышью по пунктам меню или кнопкам на панели инструментов, когда окно будет находиться в режиме "What's This?". В визуальном построителе Qt Designer текст справки можно задать через свойство whatsThis.

Если приложение предусматривает переход в режим "What's This?", то общепринятым считается добавление в меню Help пункта What's This? и кнопки What's This? на панель инструментов. Это может быть сделано за счет создания объекта QAction, у которого сигнал activated() будет связан со слотом whatsThis() главного окна приложения.