问题
自从从 Qt 5.10 升级到 Qt 5.11 后,我开始在为现有项目生成带有QDoc的文档时遇到问题。
尽管源代码中存在相应的注释,但文档中缺少功能是众多问题之一。
研究
我已设法将问题缩小到包含Q_OBJECT
宏,如提供的代码示例所示(见下文)。
Qt 文档中确实提到了这一点:
如果没有由
Cpp.ignoretokens
orCpp.ignoredirectives
变量指定,非标准构造(通常是宏)可能会导致错误的文档。
Q_OBJECT
不过不应该引起问题,因为它写得更远一点:
然而
Q_OBJECT
,宏是一个例外:QDoc 识别这种特殊的非标准构造,因此无需使用Cpp.ignoredirectives
变量指定它。
无论如何,我确实包含qt-cpp-defines.qdocconf
在我的qdocconf
文件中。
我也尝试手动添加Q_OBJECT
到忽略列表
Cpp.ignoredirectives += Q_OBJECT
但结果是一样的。
我在 Windows 10 和 Ubuntu 17 下遇到了所描述的问题。在 Windows 7 下我根本无法执行qdoc.exe
。
qdocconf
克服这个问题的正确配置是什么?
最小的例子
为了快速复制(在实际情况下,声明和实现被拆分并添加了适当的注释),请考虑以下设置:
Foo.h
#include <QObject>
class Foo : public QObject
{
// Q_OBJECT // <-- uncomment this to break QDoc
public:
Foo() {}
void boo() {}
protected:
void moo() {}
};
Foo.cpp
#include "Foo.h"
/*!
\class Foo
*/
测试.qdocconf
include($QT_INSTALL_DOCS/global/compat.qdocconf)
include($QT_INSTALL_DOCS/global/fileextensions.qdocconf)
include($QT_INSTALL_DOCS/global/qt-cpp-defines.qdocconf)
include($QT_INSTALL_DOCS/global/macros.qdocconf)
# Uncoment this for a test
# Cpp.ignoredirectives += Q_OBJECT
outputdir = html
headerdirs = .
sourcedirs = .
exampledirs = .
imagedirs = ./images
结果
- 好结果(没有
Q_OBJECT
)
执行qdoc.exe test.qdocconf
我或多或少得到以下信息:
- 富
内容
- 公共职能
- 受保护的功能
- 详细说明
Foo 类
- 所有成员的列表,包括继承的成员
公共职能
富()
无效嘘()
受保护的功能
无效哞()
详细说明
成员函数文档
富::富()
Default 构造一个 Foo 的实例。
无效 Foo::boo()
[受保护] 无效 Foo::moo()
- 坏结果(带
Q_OBJECT
)
取消注释Q_OBJECT
宏并qdoc.exe
再次运行会产生以下结果:
- 富
内容
- 详细说明
Foo 类
详细说明
重要提示: Foo
,moo
并且boo
消失了。