2014-12-19 60 views
2

我使用的doxygen生成用於基於Qt的溶液的類圖共同的基類。無論好壞,我們的大多數類繼承自QObject,導致左邊的QObject有些蹩腳的類圖,並且所有類都指向它。隱藏doxygen的類圖

有沒有什麼辦法讓doxygen的忽略的QObject在類圖?

我已經嘗試EXCLUDE_SYMBOLS = QObject,但它並沒有區別(我相信這不僅使不能生成的QObject的文檔)。

我們實際上並沒有使用文檔本身,所以即使是擾亂的解決方案,會導致一些奇怪的行爲是可以接受的,只要我們得到的類圖更漂亮的版本。

回答

0

不幸的是,解決這個問題的唯一方法都是基於隱藏代碼的Doxygen的某些部分。

預處理器指令

class Derived : 
#ifndef SKIP_THIS 
    public Base 
#endif /* SKIP_THIS */ 
{ 
    ... 
} 

然後,確保以下兩個指令都在的Doxyfile內設置:

PREDEFINED = SKIP_THIS 
ENABLE_PREPROCESSING = YES 

條件語句

這可以通過使用來完成@cond和您的代碼中有標籤。一個例子如下所示:

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::* 
0

我也遇到了這個問題。我的解決方案是一種無恥的黑客攻擊,但會產生預期的效果。基本上我有一個騙子dot這實際上是一個shell腳本,它查找標記爲QObject的節點並將它們從輸入文件中刪除。您可以通過將DOT_PATHDoxyFile的值設置爲放置冒名頂替者腳本的目錄來讓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" 

[email protected] 

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}