Читаем QT 4: программирование GUI на С++ полностью

17 QPushButton *closeButton;

18 };

Класс HelpBrowser содержит статическую функцию, которую можно вызывать в любом месте в приложении. Данная функция создает окно HelpBrowser и выводит на экран заданную страницу.

Рис. 16.3. Виджет HelpBrowser.

Ниже приводится начало реализации:

01 #include

02 #include "helpbrowser.h"

03 HelpBrowser::HelpBrowser(const QString &path,

04 const QString &page, QWidget *parent)

05 : QWidget(parent)

06 {

07 setAttribute(Qt::WA_DeleteOnClose);

08 setAttribute(Qt::WA_GroupLeader);

09 textBrowser = new QTextBrowser;

10 homeButton = new QPushButton(tr("&Home"));

11 backButton = new QPushButton(tr("&Back"));

12 closeButton = new QPushButton(tr("Close"));

13 closeButton->setShortcut(tr("Esc"));

14 QHBoxLayout *buttonLayout = new QHBoxLayout;

15 buttonLayout->addWidget(homeButton);

16 buttonLayout->addWidget(backButton);

17 buttonLayout->addStretch;

18 buttonLayout->addWidget(closeButton);

19 QVBoxLayout *mainLayout = new QVBoxLayout;

20 mainLayout->addLayout(buttonLayout);

21 mainLayout->addWidget(textBrowser);

22 setLayout(mainLayout);

23 connect(homeButton, SIGNAL(clicked),

24 textBrowser, SLOT(home));

25 connect(backButton, SIGNAL(clicked),

26 textBrowser, SLOT(backward));

27 connect(closeButton, SIGNAL(clicked),

28 this, SLOT(close));

29 connect(textBrowser, SIGNAL(sourceChanged(const QUrl &)),

30 this, SLOT(updateWindowTitle));

31 textBrowser->setSearchPaths(QStringList << path << ":/images");

32 textBrowser->setSource(page);

33 }

Мы устанавливаем атрибут Qt::WA_GroupLeader, потому что хотим выдавать окна HelpBrowser не только из главного окна, но также из модальных диалоговых окон. Обычно модальные диалоговые окна не позволяют пользователям работать с другими окнами приложения. Однако очевидно, что после запроса помощи пользователь должен иметь возможность работать как с модальным диалоговым окном, так и с браузером системы помощи. Установка атрибута Qt::WA_GroupLeader делает возможным такой режим работы.

Мы обеспечиваем два пути поиска: первый определяет путь в файловой системе к документации приложения, а второй определяет расположение ресурсов изображений. HTML может содержать обычные ссылки на изображения в файловой системе и ссылки на ресурсы изображений, пути которых начинаются с символов :/ (двоеточие и слеш). Параметр page содержит имя файла документации с возможным указанием метки HTML (anchor).

01 void HelpBrowser::updateWindowTitle

02 {

03 setWindowTitle(tr("Help: %1")

04 .arg(textBrowser->documentTitle));

05 }

При всяком изменении исходной страницы вызывается слот updateWindowTitle. Функция documentTitle возвращает текст, содержащийся в теге этой страницы.

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

02 {

03 QString path = QApplication::applicationDirPath + "/doc";

04 HelpBrowser *browser = new HelpBrowser(path, page);

05 browser->resize(500, 400);

06 browser->show;

07 }

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже