Використання QTextBrowser як простий браузер системи допомоги Жасмин Бланшет
Використання QTextBrowser як простий браузер системи допомоги
У цьому розділі ми надамо простий браузер системи допомоги, показаний на рис. 16.3 і покажемо, як його можна використовувати в додатку. Вікно програми застосовує QTextBrowser для виведення сторінок довідки, що представлені у форматі HTML. QTextBrowser може обробляти багато тегів HTML, і тому він ідеально підходить для цих цілей.
Ми починаємо із заголовного файлу:
02 class QPushButton;
03 class QTextBrowser;
04 class HelpBrowser : public QWidget
08 HelpBrowser(const QString &path,
10 static void showPage(const QString &page);
11 private slots:
12 void updateWindowTitle();
14 QTextBrowser *textBrowser;
15 QPushButton *homeButton;
16 QPushButton *backButton;
17 QPushButton *closeButton;
Клас HelpBrowser містить статичну функцію, яку можна викликати будь-де у додатку. Ця функція створює вікно HelpBrowser та виводить на екран задану сторінку.

Мал. 16.3. Віджет HelpBrowser.
Нижче наводиться початок реалізації:
02 #include "helpbrowser.h"
03 HelpBrowser::HelpBrowser(const QString &path,
04 const QString &page, QWidget *parent)
09 textBrowser = новий QTextBrowser;
10 homeButton = новий QPushButton(tr("Home"));
11 backButton = новий QPushButton(tr("& Back"));
12 closeButton = новий QPushButton(tr("Close"));
14 QHBoxLayout *buttonLayout = новий QHBoxLayout;
19 QVBoxLayout *mainLayout = новий QVBoxLayout;
23 connect(homeButton, SIGNAL(clicked()),
24 textBrowser, SLOT(home()));
25 connect(backButton, SIGNAL(clicked()),
26textBrowser, SLOT(backward()));
27 connect(closeButton, SIGNAL(clicked()),
28 this, SLOT(close()));
29 connect(textBrowser, SIGNAL(sourceChanged(const QUrl &)),
30 this, SLOT(updateWindowTitle()));
Ми встановлюємо атрибут Qt::WA_GroupLeader, тому що хочемо видавати вікна HelpBrowser не тільки з головного вікна, але також з діалогових вікон. Зазвичай модальні діалогові вікна не дозволяють користувачам працювати з іншими вікнами програми. Однак очевидно, що після запиту допомоги користувач повинен мати можливість працювати з модальним діалоговим вікном, так і з браузером системи допомоги. Встановлення атрибуту Qt::WA_GroupLeader уможливлює такий режим роботи.
Ми забезпечуємо два шляхи пошуку: перший визначає шлях у файловій системі до документації програми, а другий визначає розташування ресурсів зображень. HTML може містити звичайні посилання на зображення у файловій системі та посилання на ресурси зображень, шляхи яких починаються із символів :/ (двокрапка та сліш). Параметр page містить ім'я файлу документації з можливим зазначенням мітки HTML (anchor).
01 void HelpBrowser::updateWindowTitle()
03 setWindowTitle(tr("Help: %1")
При будь-якій зміні вихідної сторінки викликається слот updateWindowTitle(). Функція documentTitle() повертає текст, який міститься у тезі цієї сторінки.
01 void HelpBrowser::showPage(const QString &page)
03 QString path = QApplication::applicationDirPath() + "/doc";
04 HelpBrowser *browser = New HelpBrowser(path, page);
05 browser-resize (500, 400);
У статичній функції showPage() ми створюємо вікно HelpBrowser, а потім видаємо його на екран. Це вікно буде видалено автоматично, коли користувач закриє його,оскільки ми встановили у конструкторі HelpBrowser атрибут Qt::WA_DeleteOnClose.
У цьому прикладі ми припускаємо, що документація знаходиться в підкаталозі doc того каталогу, де знаходиться модуль додатка, що виконується. Усі сторінки, які передаються функції showPage(), будуть братися з цього підкаталогу.
Тепер ми можемо викликати браузер системи допомоги із програми. У головному вікні програми ми могли б створити команду Help і приєднати її до слота help(), який може мати такий вигляд: