Next Previous Table of Contents

### 8. Система помощи

Очень важная часть процесса разработки - реализация системы помощи там, где это возможно. Многие разработчики стараются сделать это в последнюю очередь, но вы должны помнить, что обычный пользователь не обязательно эксперт Unix'а. Он может прийти с темной стороны компьютерных программ, где даются все возможные конфетки и пользоваться приложением можно, даже не заглядывая в руководство. Библиотеки KDE и Qt предоставляют все, что может потребоваться, чтобы сделать приложение профессионально выглядящим в глазах обычного пользователя, и все функции помощи могут быть использованы. В приложении это:

- Всплывающие подсказки (Tool-Tips)
- Быстрая помощь (Quick-Help)
- Помощь в строке статуса (Statusbar help)
- Кнопка What's this...?

Кроме того, приложение должно обеспечивать доступ к документации в HTML-формате, используя стандартную кнопку F1.

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

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

### 8.1 Всплывающие подсказки

Очень простой способ обеспечения помощи - это всплывающие подсказки. Это маленькие сообщения, которые появляются, когда пользователь подводит указатель мыши к элементу. Сообщение исчезает, когда указатель мыши убирается с элемента. Наиболее популярно использование всплывающих подсказок в панелях инструментов. Здесь всплывающие подсказки должны быть как можно короче, потому что панель инструментов может конфигурироваться для отображения только кнопок, кнопок и текста справа, кнопок и текста под ними или только текста. Это может быть реализовано в приложении, а может и не быть реализовано. Текст всегда отображается как всплывающая подсказка, и панель инструментов обычно состоит из кнопок и других элементов, например, строк ввода и выпадающих списков. Для получения полной информации см. описание класса `KToolBar` в библиотеке KDE-UI.

Например, рассмотрим кнопку "New File" в сгенерированном шаблоне:

> `

>     toolBar()->insertButton(Icon("filenew.xpm"), ID_FILE_NEW, true, i18n("New File") );

> `

Здесь часть `i18n("New File")` реализует всплывающую подсказку. Она заключена в макрос i18n(), предоставляемый `kapp.h` для перевода подсказки на используемый язык.

Всплывающая подсказка может быть добавлена к любому пользовательскому элементу с помощью Qt-классов `QToolTip` и `QToolTipGroup`. Например,

> `

>     QToolTip::add( yourwidget, i18n("Ваша_подсказка") );

> `

Для получения более подробной информации, см. описание класса `QToolTip` в документации Qt.

### 8.2 Добавление быстрой помощи

Окно быстрой помощи - это другой хороший пример предоставления помощи. Пользователь может получить быструю помощь о назначении элемента, нажав правую кнопку мыши над ним и выбрав из контекстного меню пункт "Quick-Help". Функция Быстрой помощи располагается где-то посередине между всплывающими подсказками и полным руководством пользователя. Полное руководство содержит слишком много связанной с другими частями приложения информации, а всплывающие подсказки не дают достаточно информации. Чтобы увидеть, как работает быстрая помощь, откройте любой диалог в KDevelop и нажмите правую кнопку мыши над его элементом. Затем выберите пункт меню Quick-Help, и появится окно с сообщением. Эти сообщения могут быть отформатированы с использованием цвета, различных шрифтов, и даже содержать гиперссылки (что может быть использовано для обращения к страницам документации).

Для реализации быстрой помощи добавьте в секцию "include" файл `kquickhelp.h`. Поскольку класс `KQuickHelp` - часть библиотеки KDE-UI, она уже должна использоваться вашим приложением. Если это не так, установите соответствующий флаг линкера для использования kdeui.

Например,

> `

>     KQuickHelp::add( yourwidget, i18n("Ваше_сообщение") );

> `

что почти аналогично QToolTip. При создании диалогового окна с помощью редактора диалогов KDevelop'а, добавьте ваши всплывающие подсказки и быструю помощь в файл реализации - НЕ в исходный файл редактора диалогов, поскольку этот файл переписывается при каждом редактировании элемента.

Класс `KQuickHelp` предоставляет возможность форматирования текста с использованием тагов. Он позволяет включение цветового выделения, гиперссылок, типов шрифтов и размеров шрифтов. См. "KDE Library Reference Guide" и документацию по классу `KQuickTip` для дополнительной информации.

### 8.3 Реализация помощи в строке статуса

Шаблон приложения, генерируемый KDevelop, содержит, кроме всего прочего, строку статуса. Кроме того, он содержит сообщения для каждого из пунктов меню и элементов панели инструментов. Помощь строки статуса - короткое сообщение, которое подробнее объясняет смысл всплывающей подсказки, или может рассматриваться как замена всплывающих подсказок для пунктов меню, и, как следует из названия, отображается в строке статуса, когда вход меню подсвечивается; поэтому все входы меню связывают сигнал `highlighted(int)` с методом `statusCallback(int)`, который выбирает соответствующее сообщение в конструкции switch. Если вы добавляете новый пункт меню или новую кнопку панели инструментов, добавьте соответствующий вход в этот метод с кратким описанием действия, выполняемого при активации кнопки или пункта меню.

Пример:

> `

>         case ID_FILE_NEW:
>                     slotStatusHelpMsg(i18n("Creates a new document"));
>                     break;

> `

Это будет отображать сообщение в строке статуса, вызывая метод `slotStatusHelpMsg()` с соответствующей переведенной строкой помощи, когда пользователь подсвечивает вход меню или кнопку панели инструментов с ID ID_FILE_NEW, который привязан к методу `statusCallback()`. Панели инструментов связаны с этим методом сигналом `pressed(int)`, что позволяет пользователю нажать кнопку панели и убрать с нее указатель мыши, не выполняя команды. `KToolBar` также предоставляет сигнал `highlighted(int, bool)`, который может быть использован для отображения сообщения при подсветке кнопки вместо ее нажатия.

### 8.4 Кнопка "What's This...?"

Кнопка "What's This...?" предоставляет окно помощи, аналогичное Quickhelp, когда пользователь хочет получить конкретную помощь по определенному элементу рабочей области или элементу панели инструментов. Она располагается на панели инструментов и активируется после нажатия пользователем на нее. Курсор изменяется на стрелку с вопросительным знаком, как это изображено на кнопке. Пользователь может нажать на видимый элемент и получить окно помощи. В качестве упражнения вы можете посмотреть на поведение What's this...? в KDevelop. Для добавления кнопки What's This...? проделайте следующее:

1. включите `qwhatsthis.h` в исходный код
2. добавьте функцию-член `QWhatsThis` whats_this (или с другим именем) в область private вашего класса, унаследованного от `KTMainWindow`
3. определите идентификатор ресурса для этой кнопки в `resource.h`, например, `#define ID_HELP_WHATS_THIS 10100`
4. в методе, создающем панель инструментов (обычно `initToolBar()`), добавьте, где должна располагаться ваша кнопка:

   > `

   >       whats_this = new QWhatsThis;
   >       QToolButton *btnwhat = whats_this->whatsThisButton(toolBar());
   >       QToolTip::add(btnwhat, i18n("What's this...?"));
   >       toolBar()->insertWidget(ID_HELP_WHATS_THIS, btnwhat->sizeHint().width(), btnwhat);
   >       btnwhat->setFocusPolicy(QWidget::NoFocus);

   > `

5. добавьте сообщение, которое будет отображаться для определенного элемента:

   > `

   >     whats_this->add(class_tree, i18n("Class Viewer\n\n"
   >                                       "The class viewer shows all classes, methods and variables "
   >                                       "of the current project files and allows switching to declarations "
   >                                       "and implementations. The right button popup-menu allows more specialized "
   >                                       "functionality."));

   > `

Next Previous Table of Contents