写在前面

只要打开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什么我们都没设置。

图片:qdoc_first.jpg

http://www.qtcn.org/bbs/read-htm-tid-31757.html

Qt文档系统分析(解释Qt文档的生成工具与过程)的更多相关文章

  1. Qt 窗口属性简介之Qt::WA_DeleteOnClose

    一.简述 今天介绍一个简单的窗口属性——Qt::WA_DeleteOnClose. 在正常创建窗口后,我们一般会调用close()方法来关闭窗口,这里我们看一下Q助手中关于close()方法的介绍. ...

  2. PyQt(Python+Qt)学习随笔:PyQt帮助文档导入assistant后离线查阅

    在按照<第15.6节 PyQt5安装与配置>完成PyQt5及PyQt5-tools的安装后,发现Qt Designer中的帮助不能使用,报错: 按照<PyQt学习随笔:Qt Desi ...

  3. Nginx配置文档具体解释

    Nginx的配置文档具体解释.在这儿做个总结,以便以后使用的时间查看. 下面大部分自己整理.部分来自參考 #设置用户 #user  nobody; #启动进程数(一般和server的CPU同样) #能 ...

  4. 文档生成工具——Doxygen

    参考: 1.https://blog.csdn.net/liao20081228/article/details/77322584 2.https://blog.csdn.net/wang150619 ...

  5. 【C#附源码】数据库文档生成工具支持(Excel+Html)

    [2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...

  6. 微软开源全新的文档生成工具DocFX

    微软放弃Sandcastle有些年头了,微软最近开源了全新的文档生成工具DocFX,目前支持C#和VB,类似JSDoc或Sphinx,可以从源代码中提取注释生成文档之外,而且还有语法支持你加入其他的文 ...

  7. DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)

    前言: 距离上一个版本V3.3版本的文章发布,已经是1年10个月前的事了. 其实版本一直在更新,但也没什么大的功能更新,总体比较稳定,所以也不怎么写文介绍了. 至于工作上的事,之前有半年时间跑去学英语 ...

  8. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧 ...

  9. (转)Doxygen文档生成工具

    http://blog.csdn.net/lostaway/article/details/6446786 Doxygen 是一个支持 C/C++,以及其它多种语言的跨平台文档生成工具.如同 Java ...

随机推荐

  1. STS开发环境搭建与配置

    STS开发环境搭建与配置 (2012-04-11 07:24:51) 转载▼ 1.   环境准备 安装JDK.MAVEN 1.1.        下载 下载sprdfingsource-tool-su ...

  2. 视频播放MPMoviePlayerController

    视频播放 如何播放视频 iOS提供了MPMoviePlayerController.MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体\网络音频 提示:网络 ...

  3. 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)

    核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...

  4. Java中利用Math.random()产生服从泊松分布的随机数

    众所周知.Java的Math.random()产生的是服从均匀分布的随机数,可是其它分布的应用也相当广泛,比如泊松分布和高斯分布(正态分布).而这些分布Java没有非常好的提供(高斯分布能够利用Ran ...

  5. 亲测有效,解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/hjf161105/article/details/78850658 最近租了一个阿里云云翼服务器,趁 ...

  6. cocos2d-x 3.0学习游戏笔记的例子《卡塔防》第五步---开始建立游戏界面

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...

  7. QWidget 之paint部分杂记(从Qt4.0到4.8的进化,在Qt 4.4中,Alien Widget诞生了)

    Qt 4.0 automatically double-buffers Qt 4.1 QWidget::autoFillBackground Qt 4.2 delayed widget creatio ...

  8. Android studio中的6大布局

    1.相对布局代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: ...

  9. 3.RabbitMQ相关概念的杂谈

    1.vhost,为什么我要有这个vhost呢? 这是因为可能有很多组使用RabbitMQ,有产品组,用户组,vhost,虚拟主机的意思,可以避免命名冲突. 2.Exchange,交换机 有四种交换机 ...

  10. 重设windows10中的sub linux系统用户密码

    原文:重设windows10中的sub linux系统用户密码 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/haiyoung/article/detai ...