【发布时间】:2018-08-17 22:51:15
【问题描述】:
TL;DR:如何为与Q_PROPERTY 声明的属性同名的访问器生成 doxygen 文档?
Qt 的 property system 使得在给定属性上使用 Qt 的元对象系统成为可能:
// example class and documentation
class Widget : public QObject {
Q_OBJECT
Q_PROPERTY(int size READ size WRITE setSize NOTIFY sizeChanged)
public:
Widget(QObject * parent = nullptr) : QObject(parent){}
int size() const;
public slots:
void setSize(int new_size);
signals:
void sizeChanged(int); //!< signals a size change
private:
int m_size = 0; //!< the Widget's size, see #size.
};
如果现在在实现中使用 doxygen
//! @property size is the size of our widget
//! @brief Set the widget's size to @a new_size.
void Widget::setSize(int new_size) {
if(new_size != m_size) {
m_size = new_size;
emit sizeChanged(m_size);
}
}
//! @brief Returns the widget's size.
int Widget::size() const {
return m_size;
}
只有setSize 的文档才能正确生成。 size() 的文档被误认为是 property 的 文档。上面的代码就像
//! @property size
//! @brief Returns the widget's size.
int Widget::size() const {
return m_size;
}
被使用了。 @fn Widget::size()const 或任何其他 doxygen 特殊命令似乎都没有帮助:size() 生成的文档保持空白,并最终出现在 size(属性)文档中。
这是一个错误,还是我遗漏了什么?
【问题讨论】:
-
doxygen 的哪个版本?或许配置章节中的示例,段落示例可以给你一个提示。请参阅预定义部分。
-
@albert doxygen --version 是 1.8.11。 doxygen 手册部分中的“技巧”有效,但会一起删除属性文档,无论我是否想要 both。但我猜这很可能是not possible。
-
我认为基本问题可能通过以下方式发出信号:“.../aa.cpp:6: warning: member with no name found.”,这是属性文档行。我还没有看到解决方案。 (在消息周围的 doxygen 代码中存在以下内容:“// 这不应该被调用”。
-
看起来在包含文件/类定义中记录函数和属性时可以这样://!是我们的小部件 Q_PROPERTY(int size READ size WRITE setSize NOTIFY sizeChanged) 和 //! 的大小返回小部件的大小。 int size() 常量;
-
您是否尝试过在 .h 文件而不是 .cpp 文件中记录 Q_PROPERTY 的建议?