我使用doxygen为基于Qt的解决方案生成类图。无论好坏,我们的大多数类继承自QObject,这导致有些糟糕的类图,左边是QObject,所有类都指向它。
有没有办法让doxygen忽略类图中的QObject?
我已经尝试了EXCLUDE_SYMBOLS = QObject
但它没有任何区别(我相信这只会使QObject的文档无法生成)。
我们实际上并没有使用文档本身,所以只要我们得到一个更漂亮的类图表,即使是会导致一些奇怪行为的破坏性解决方案也是可以接受的。
答案 0 :(得分:0)
不幸的是,解决此问题的唯一方法都是基于将代码的某些部分隐藏到Doxygen。
预处理程序指令
class Derived :
#ifndef SKIP_THIS
public Base
#endif /* SKIP_THIS */
{
...
}
然后确保在Doxyfile中设置以下两个指令:
PREDEFINED = SKIP_THIS
ENABLE_PREPROCESSING = YES
<强>条件强>
可以通过在代码中使用@cond
和@endcond
标记来完成此操作。示例如下所示:
class Derived :
/// @cond SKIP_THIS
public Base
/// @endcond
{
...
}
内部标记
要忽略代码的某个部分,可以使用\internal
和\endinternal
简单地封闭相应的部分。请务必在配置文件中将INTERNAL_DOCS
设置为NO
。
<强> EXCLUDE_SYMBOLS 强>
这会从您的文档中排除特定单词正则表达式。也可以使用GUI通过
进行设置"expert > input"
因此,可以使用适当的正则表达式从特定名称空间中排除所有内容,在这种情况下通过星号*
排除。例如,
class X: public my_space::Y {
...
}
EXCLUDE_SYMBOLS = my_space::*
答案 1 :(得分:0)
我也遇到过这个问题。我的解决方案是一个令人发指的黑客,但确实产生了预期的效果。基本上我有一个冒名顶替者dot
,它实际上是一个shell脚本,它查找标记为QObject
的节点并将其从输入文件中删除。您可以通过将dot
DOT_PATH
值设置为放置冒名顶替脚本的目录,让Doxygen使用冒名顶替者DoxyFile
。
#! /bin/bash
# This hack is a wrapper to GraphViz dot that removes any nodes that
# are contained in the following list.
LABELS_TO_FILTER="QObject"
ARGS=$@
for ARG in ${ARGS}
do
if [ -e ${ARG} ]
then
FILENAME=$(basename "${ARG}")
EXT="${FILENAME##*.}"
if [ ${EXT} == "dot" ]
then
DOT_FILE=${ARG}
for LABEL_TO_FILTER in ${LABELS_TO_FILTER}
do
NODE_NAME=$(grep "label=\"${LABEL_TO_FILTER}\"" ${DOT_FILE} | awk '{print $1}')
if [[ ! -z "${NODE_NAME}" ]]
then
echo "${NODE_NAME} is labelled ${LABEL_TO_FILTER}, filtering..."
sed -i "/${NODE_NAME}/d" ${DOT_FILE}
fi
done
break
fi
fi
done
dot ${ARGS}