你如何用doxygen记录QFlags?

时间:2018-01-25 08:21:06

标签: c++ qt doxygen

我有这样的事情(来自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生成函数签名,显示所有参数,但不链接标志类型。我可以以某种方式实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

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

在Doxy文件中:

  • 设置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的文档中,如下所示:

在Doxy文件中:

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,
};

将产生:

  

选项类型是QFlags