Qt (8)-3 Qtヘルプファイルを表示する
独自のQtアプリケーションの中で表示する
以下のようなQtAssistantのような画面を作成してみましょう。
ここでのサンプルは、以下のファイルから構成されています。
- sample.cpp
-- mainプログラムです。MainWindowの画面を表示しているだけですので詳細な説明を省略します。
- helpbrowser.h
-- QTextBrowserを継承したHelpBrowserの画面ヘッダです。詳細な説明を省略します。
- helpbrowser.cpp
-- HelpBrowserの画面のソースです。以降に詳細な説明をします。
- mainwindow.h
-- QMainWindowを継承したMainWindowの画面ヘッダです。詳細な説明を省略します。
- mainwindow.cpp
-- MainWindowの画面のソースです。以降に詳細な説明をします。
[helpbrowser.cpp]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #include <QHelpEngine>
#include "helpbrowser.h"
HelpBrowser::HelpBrowser(QHelpEngine *helpEngine, QWidget *parent)
: QTextBrowser(parent), helpEngine(helpEngine)
{
}
QVariant HelpBrowser::loadResource(int type, const QUrl &url)
{
if (url.scheme() == "qthelp")
return QVariant(helpEngine->fileData(url));
else
return QTextBrowser::loadResource(type, url);
}
|
簡単に解説しておきます。
loadResourceをオーバーロードしているだけです。コンストラクタでQHelpEngineをもらう以外は、何も変更点がありません。
loadResourceのオーバーロードでは、QHelpEngineで、指定urlのHTMLドキュメントを探して、内容を返しています。
簡単ですね。
[mainwindow.cpp]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| #include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// create menu.
QMenu * pfileMenu = menuBar()->addMenu(tr("&File"));
// create status bar.
QStatusBar *pstatus= statusBar();
pstatus->showMessage(tr("Ready"));
// create action
m_exit_act = pfileMenu->addAction(tr("E&xit" ));
m_exit_act->setShortcut(tr("Ctrl+Q"));
m_exit_act->setStatusTip(tr("Exit the application"));
QSplitter *helpPanel = new QSplitter(Qt::Horizontal,this);
// help engine.
m_helpEngine=new QHelpEngine(qApp->applicationDirPath()+"/collection_doc.qhc",this);
m_helpEngine->setupData();
m_phtml=new HelpBrowser (m_helpEngine,this);
helpPanel->insertWidget(0, m_helpEngine->contentWidget());
helpPanel->insertWidget(1, m_phtml);
setCentralWidget(helpPanel);
// action connect.
connect(m_exit_act, SIGNAL(triggered()),
qApp, SLOT(closeAllWindows()));
connect(m_helpEngine->contentWidget(),
SIGNAL(linkActivated(const QUrl &)),
m_phtml, SLOT(setSource(const QUrl &)));
setWindowTitle(tr("SampleWindow"));
resize(400, 300);
}
|
簡単に解説しておきます。
7 - 10行目は、メニュー、ステータスバーを作成しているところです。
12 - 15行目は、アクションを作成しているところです。
- m_exit_act:アプリケーションを終了するアクションです。
20 - 21行目は、QHelpEngineを作成しているところです。
collection_doc.qhcのフルパス情報を引数に渡しています。
22行目は、先のHelpBrowserを作成しているところです。
QHelpEngineを引数に渡しています。
32 - 34行目は、QHelpEngineのコンテンツ画面でリンク情報がクリックされたら、先のHelpBrowserのsetSourceを起動するようにconnectしています。
以外にシンプルに作成できます。
これをコンパイルして実行すると先の画面が表示されます。
コンパイル時は、以下のようにコマンドパラメータでQTHELPを取り込むか、.proへ追記する必要があります。
ただし、ここで読めるQtヘルプファイルは、一部修正が必要となります。
QtAssistantで読み込むわけではありませんので、HELPプロジェクトコレクションファイル(.qhcp)のassistantタグを全て消去し、
Qtヘルプファイルを作り直す必要があります。
以外に簡単にできてしまうのに、少し驚きました。
ここでは、紹介しませんでしたが、まだまだ、QtHelp関連のクラスはあります。
例えば、QHelpSearchEngineでは、検索も行えます。
もっと、使いこなせば、QtAssistantの機能を自分のアプリケーションのうまく埋め込むことができます。
もっと、Qt関連について詳しく知りたい方は、以下の本なども良いと思います。
Qtに関する日本語の本が少ないですね。「入門書」は、さすがに、このページを読まれるくらいの方は不要だと思います。
やっぱり、本+ネット+試してみる!!の3本柱でやっていく以外にないように思います。
コメントをどうぞ