Глава 33 – Предоставление помощи

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

Будут затронуты три уровня помощи — от лаконичных всплывающих подсказок до полноценной Online Help. Показано, как с помощью QEvent::ToolTip, QTextBrowser и внешнего Qt Assistant добиться ощущаемого эффекта «приложение объясняет само себя». Всего несколько решений — и интерфейс начинает работать на вас.

Пропустить эту главу — значит оставить пользовательский опыт на уровне «как получится».

Доступ к архиву со всеми исходными кодами примеров, готовыми к компиляции, и 16 главами книги, открытыми бесплатно — для немедленной практики и закрепления материала.

Самопроверка по главе

Какие три типа помощи различают в Qt-приложениях?Ответ
Правильный ответ: Всплывающая подсказка (tooltip), подсказка «Что это» и система помощи (Online Help).
Почему не рекомендуется использовать всплывающие подсказки для элементов с очевидным назначением?Ответ
Правильный ответ: Применение подсказок теряет смысл, когда объяснение излишне — повторение надписи кнопки в tooltip не добавляет информации и только отвлекает пользователя.
Как удалить всплывающую подсказку из виджета?Ответ
Правильный ответ: Нужно передать в метод setToolTip() пустую строку.
Зачем в примере создания своего окна tooltip перезаписывается метод event()?Ответ
Правильный ответ: Чтобы отловить событие типа QEvent::ToolTip и обработать его по-своему, показав кастомное окно вместо стандартного tooltip.
Почему в примере с кастомным tooltip используется QTimer::singleShot(3000, …)?Ответ
Правильный ответ: Окно подсказки должно обязательно исчезать через определенный промежуток времени (3 секунды), чтобы не загромождать интерфейс и следовать стандартному поведению подсказок.
Какой класс используется для реализации навигатора системы помощи с поддержкой HTML?Ответ
Правильный ответ: QTextBrowser — он располагает всем необходимым для показа текста в формате HTML с поддержкой навигации.
Зачем в примере HelpBrowser соединяются сигналы backwardAvailable(bool) и forwardAvailable(bool) со слотами setEnabled(bool) кнопок?Ответ
Правильный ответ: Это позволяет автоматически делать кнопки навигации активными или неактивными в зависимости от наличия истории перемещений (есть ли куда переходить назад или вперед).
Что произойдет, если забыть вызвать метод show() для кастомного окна tooltip?Ответ
Правильный ответ: Окно подсказки не будет видимым пользователю, хотя все остальные операции (установка позиции, текста) выполнятся корректно.
Почему для системы помощи рекомендуется использовать формат HTML?Ответ
Правильный ответ: HTML позволяет включать графику, ссылки, форматировать текст, а также существует множество редакторов для его создания, включая возможность ручного редактирования.
Для чего используется метод setSearchPaths() в QTextBrowser?Ответ
Правильный ответ: Он устанавливает список путей для поиска документов, по которым QTextBrowser будет искать файлы помощи при переходах по ссылкам.
Какой ключ используется при запуске Qt Assistant для включения режима удаленного управления?Ответ
Правильный ответ: Ключ -enableRemoteControl активирует режим удаленного управления Qt Assistant из приложения.
Что вернет функция launchAssistant(), если исполняемый файл assistant не найден в PATH?Ответ
Правильный ответ: Функция вернет false, так как QProcess::startDetached() не сможет запустить процесс и вернет false.
Почему в конструкторе MyWidget используется Qt::ToolTip в качестве типа окна?Ответ
Правильный ответ: Этот флаг создает окно без обрамления, характерное для подсказок, что визуально соответствует стандартному поведению tooltip.

Практические задания

Простой уровень

Виджет с всплывающими подсказками
Создайте приложение с окном, содержащим три кнопки: «Сохранить», «Отмена» и «Помощь». Добавьте для каждой кнопки всплывающую подсказку, объясняющую ее функцию. Для кнопки «Помощь» используйте многострочную HTML-подсказку с форматированием (заголовок и список возможностей).
Подсказки: Используйте метод setToolTip() для установки подсказок. Для HTML-форматирования можно использовать теги <h3>, <ul>, <li>. Разместите кнопки с помощью QHBoxLayout. Не забудьте, что для кнопок с очевидным назначением подсказки должны добавлять информацию, а не дублировать текст.

Средний уровень

Кастомное окно tooltip с изображением
Создайте виджет, который при наведении курсора показывает кастомное окно подсказки, содержащее не только текст, но и небольшое изображение (например, иконку). Подсказка должна автоматически скрываться через 5 секунд. Реализуйте возможность изменения времени показа подсказки через параметр конструктора.
Подсказки: Наследуйтесь от QWidget и перезапишите метод event(). Для создания окна с изображением используйте QLabel с методом setPixmap(). Используйте QHBoxLayout для размещения иконки и текста рядом. Не забудьте установить флаг Qt::ToolTip для окна. Сохраните время показа как член класса.

Сложный уровень

Система помощи с поиском и навигацией
Создайте полноценную систему помощи на основе QTextBrowser с дополнительными возможностями: кнопками навигации (назад, вперед, домой), строкой поиска для фильтрации содержимого и списком закладок. Подготовьте несколько HTML-страниц с перекрестными ссылками, включая главную страницу (index.html) и 2-3 тематические страницы. Реализуйте сохранение и загрузку закладок между сеансами работы.
Подсказки: Помимо QTextBrowser и кнопок навигации добавьте QLineEdit для поиска и QListWidget для закладок. Используйте метод find() в QTextBrowser для поиска текста. Для закладок сохраняйте URL текущей страницы с помощью source(). Для сохранения между сеансами используйте QSettings. Создайте файлы ресурсов (.qrc) для HTML-страниц. Используйте сигнал sourceChanged() для отслеживания навигации.

💬 Присоединяйтесь к обсуждению!

Разобрались с системами помощи в Qt? Возникли вопросы о том, когда использовать простые tooltip, а когда стоит создать полноценную систему помощи?

Может быть, у вас есть интересные решения для кастомных подсказок или опыт интеграции Qt Assistant?

Поделитесь своими находками, задайте вопросы или помогите другим читателям сделать их приложения более удобными!

Leave a Reply

Your email address will not be published. Required fields are marked *