ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

Qt (8)-3 Qtヘルプファイルを表示する

公開日| 2009年06月26日 | コメントはまだありません。
独自の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へ追記する必要があります。
> qmake "CONFIG+=HELP"

ただし、ここで読めるQtヘルプファイルは、一部修正が必要となります。
QtAssistantで読み込むわけではありませんので、HELPプロジェクトコレクションファイル(.qhcp)のassistantタグを全て消去し、 Qtヘルプファイルを作り直す必要があります。

以外に簡単にできてしまうのに、少し驚きました。

ここでは、紹介しませんでしたが、まだまだ、QtHelp関連のクラスはあります。
例えば、QHelpSearchEngineでは、検索も行えます。

もっと、使いこなせば、QtAssistantの機能を自分のアプリケーションのうまく埋め込むことができます。



もっと、Qt関連について詳しく知りたい方は、以下の本なども良いと思います。
Qtに関する日本語の本が少ないですね。「入門書」は、さすがに、このページを読まれるくらいの方は不要だと思います。
やっぱり、本+ネット+試してみる!!の3本柱でやっていく以外にないように思います。


コメント

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ