Qt文檔系統分析(一)

http://hi.baidu.com/cyclone/blog/item/a8b5277f247d3f0628388aa0.html

只要打開Qt Assistant或Qt Creator的Help,或是打開在線版的  http://doc.qt.nokia.com   ,Qt的漂亮的文檔就會呈現在我們眼前。

而且 Qt的文檔,長期以來似乎都是Qt的一大優勢。比如大家在比較Qt和Wx,或比較Qt和GTK+時,Qt的文檔似乎總是更勝一籌。

那麼,這些文檔時怎麼生成的呢?

幕後英雄們

當然,這些文檔幕後的應用是Qt的開發人員。我們對他們表示感謝。

但我們這兒關注的英雄呢?是生成這些文檔的軟件:

  • qdoc3
  • qhelpgenerator
  • qcollectiongenerator

先簡單介紹一下它們的作用:(個人理解,不當請指正)

  • qdoc3 工作時需要一個配置文件 xxx.qdocconf (Qt Document Configure)
    • 根據該文件的設置,將源碼代碼中的各種符合規則的註釋提取出來,生成一系列的 .html 文件
    • 如果只用來在線顯示,這一步就足夠了
  • qhelpgenerator 工作時需要一個配置文件 xxx.qhp(Qt Help Project)
    • 根據該文件設置,將一系列的 html 文件變成 .qch 文件
    • 如果只是要求生成的用文件能通過 assistant 查看,到這一步也足夠了
  • qcollectiongenerator 工作時需要一個配置文件 xxx.qhcp(Qt Help Collection Project)
    • 該文件可以管理一系列的 .qch 文件。比如我們裝完Qt後就有: qt.qch , assistant.qch, qmake.qch 等
    • 該文件可以對 assistant 顯示的外觀進行定製

考慮到這些東西內容太多了,主要關注下qdoc3吧

一個小例子

先看一個例子,我們先編寫一個很小很小的Qt程序,

先看first.pro文件,其實沒什麼看的,是吧

TARGET = first
SOURCES += main.cpp widget.cpp
HEADERS += widget.h

看一下我們的Widget類(其實是一個空類),下面是頭文件 widget.h

#

ifndef WIDGET_H




# define WIDGET_H
# include <QtGui / QWidget>
class Widget : public QWidget
{
Q_OBJECT
public :
Widget (QWidget *parent = 0 );
~Widget ();
public slots:
void setValue (double v );
signals:
void signal1 ();
void signal2 (const QString &);
};
# endif // WIDGET_H

這是類的實現 widget.cpp

#

include "widget.h"





/*!
/class Widget

/brief The Empty Widget Class provides nothings.

The Empty Widget is a widget that

/sa QWidget
*/

/*!
/fn void Widget::signal1()

This signal is emitted when .
*/

/*!
/fn void Widget::signal2(const QString&)

This signal is emitted when
*/

/*!
Creates a Widget Window.
*/
Widget ::Widget (QWidget *parent )
: QWidget (parent )
{
}

/*!
Destroys this Widget.
*/
Widget ::~Widget ()
{

}

/*!
Set a new value /a v.
*/
void Widget ::setValue (double v )
{
}

再看一下 main.cpp 文件

/*!




/page index.html
/title First Exmaple

/section1 Description
This is a demo program.

/section1 Class
/list
/o /l Widget
/o second
/o third
/endlist

*/
# include <QtGui / QApplication>
# include "widget.h"

int main (int argc , char *argv [])
{
QApplication a (argc , argv );
Widget w ;
w .show ();

return a .exec ();
}

萬事具備,還欠什麼呢?注意我們前面提到 qdoc3 需要什麼來着?

對了,再創建一個 first.qdocconf 文件就好了

project = First
description = First QDoc Exmaple
outputdir = html
headerdirs = .
sourcedirs = .

一切準備妥當了,運行一下試試吧

qdoc3 first.qdocconf

怎麼樣,看到效果了吧?什麼?不如Qt自帶的手冊好看,當然網頁頭、網頁尾、css什麼我們都沒設置。

發佈了23 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章