从doxygen类图中隐藏公共基类

时间:2014-12-19 15:57:11

标签: qt doxygen

我使用doxygen为基于Qt的解决方案生成类图。无论好坏,我们的大多数类继承自QObject,这导致有些糟糕的类图,左边是QObject,所有类都指向它。

有没有办法让doxygen忽略类图中的QObject?

我已经尝试了EXCLUDE_SYMBOLS = QObject但它没有任何区别(我相信这只会使QObject的文档无法生成)。

我们实际上并没有使用文档本身,所以只要我们得到一个更漂亮的类图表,即使是会导致一些奇怪行为的破坏性解决方案也是可以接受的。

2 个答案:

答案 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}