我有这样的事情(来自QFlags文档的示例):

public:
//! Enum doc
enum Option {
    NoOptions = 0x0, //! Value doc
    ShowTabs = 0x1,
    ShowAll = 0x2,
};
Q_DECLARE_FLAGS(Options, Option)

现在,我可以记录Option及其值,并且通过doxygen可以很好地显示它们。但是我无法使doxygen为Options生成任何东西。
在Qt文档中,它看起来像this,它们在枚举文档的顶部和底部添加了一条注释,并在索引部分将其作为单独的类型列出。

更重要的是,Qt可以链接到QFlags,在此将其用作函数参数(例如QObject::findChild())。 Doxygen生成函数签名,显示所有参数,但不链接标志类型。我能以某种方式实现吗?

最佳答案

多亏了albert's comment,我可以通过以下操作使QFlags类型出现在文档中:
在Doxyfile中:

  • 设置ENABLE_PREPROCESSING = YES
  • 设置MACRO_EXPANSION = YES
  • 设置PREDEFINED += "Q_DECLARE_FLAGS(flagsType,enumType)=typedef QFlags<enumType> flagsType;"或者,如果您希望将其显示为enum而不是typedef:PREDEFINED += "Q_DECLARE_FLAGS(flagsType,enumType)=enum flagsType {};"

  • 然后,您可以像平常一样记录Q_DECLARE_FLAGS()调用:
    //! Enum doc
    enum Option {
        NoOptions = 0x0, //! Value doc
        ShowTabs = 0x1,
        ShowAll = 0x2,
    };
    //! QFlags type for \ref Option
    Q_DECLARE_FLAGS(Options, Option)
    

    关于enum本身的注释,就像Qt文档一样:
    我认为不可能将其自动插入,但是您可以编写一个alias,然后将其手动插入enum的文档中,如下所示:
    在Doxyfile中:
    ALIASES += qFlagsNote{2}="<p>The \1 type is a typedef for QFlags\<\2\>. It stores an OR combination of \2 values.</p>"
    
    在C++代码中:
    /*! Enum doc
     * \qFlagsNote{Options,Option}
     */
    enum Option {
        NoOptions = 0x0, //! Value doc
        ShowTabs = 0x1,
        ShowAll = 0x2,
    };
    
    将产生:

    10-01 23:53