Qt 从doxygen类图中隐藏公共基类

Qt 从doxygen类图中隐藏公共基类,qt,doxygen,Qt,Doxygen,我正在使用doxygen为基于Qt的解决方案生成类图。不管是好是坏,我们的大多数类都继承自QObject,这导致了一些糟糕的类图,QObject在左边,所有类都指向它 有没有办法让doxygen忽略类图中的QObject 我已经尝试了EXCLUDE_SYMBOLS=QObject,但没有任何区别(我相信这只会使QObject的文档无法生成) 我们实际上并没有使用文档本身,因此,只要我们得到一个更漂亮的类图版本,即使是会导致一些奇怪行为的中断解决方案也是可以接受的。不幸的是,解决此问题的唯一方法都

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

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

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


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

不幸的是,解决此问题的唯一方法都是将代码的某些部分隐藏到Doxygen

预处理器指令

class Derived : 
#ifndef SKIP_THIS
    public Base
#endif /* SKIP_THIS */
{
  ...
}
然后确保在Doxyfile中设置了以下两个指令:

PREDEFINED = SKIP_THIS
ENABLE_PREPROCESSING = YES
条件句

class Derived : 
#ifndef SKIP_THIS
    public Base
#endif /* SKIP_THIS */
{
  ...
}
这可以通过在代码中使用
@cond
@endcond
标记来实现。示例如下所示:

class Derived : 
/// @cond SKIP_THIS
        public Base
/// @endcond
{
  ...
}
内部标签

要忽略代码的一部分,只需使用
\internal
\endinternal
将适当的部分括起来即可。确保在配置文件中将
INTERNAL_DOCS
设置为
NO

排除_符号

这将从您的文档中排除特定的单词regex。也可以通过使用GUI进行设置

"expert > input"
因此,可以使用适当的正则表达式排除特定名称空间中的所有内容,在本例中是通过星号
*
。比如说,

class X: public my_space::Y {
...
}

EXCLUDE_SYMBOLS = my_space::*

我也遇到了这个问题。我的解决方案是一个骇人听闻的破解,但确实达到了预期的效果。基本上,我有一个冒名顶替者
dot
,它实际上是一个shell脚本,用于查找标记为
QObject
的节点,并将它们从输入文件中删除。通过将
dotu路径
DoxyFile
值设置到放置视点替用程序脚本的目录,可以让Doxygen使用视点替用程序
dot

#! /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}