标签: qdoc

//![0]在Qt源代码中

Qt示例项目中C++/QML源中的//! [n](n= 0,1,2 ......)标记是什么意思?

例如:

//! [0]
GLWidget::GLWidget(Helper *helper, QWidget *parent)
    : QGLWidget(QGLFormat(QGL::SampleBuffers), parent), helper(helper)
{
    elapsed = 0;
    setFixedSize(840, 400);
    setAutoFillBackground(false);
}
//! [0]

//! [1]
void GLWidget::animate()
{
    elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
    repaint();
}
//! [1]

//! [2]
void GLWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    painter.begin(this);
    painter.setRenderHint(QPainter::Antialiasing);
    helper->paint(&painter, event, elapsed);
    painter.end();
}
//! [2]
Run Code Online (Sandbox Code Playgroud)

c++ qt comments qdoc

19
推荐指数
1
解决办法
2824
查看次数

为嵌套模板类声明operator ==

我在另一个模板类中有一个以下嵌套模板类:

template<typename T>
struct A
{
    template<typename V>
    struct B {};
};
Run Code Online (Sandbox Code Playgroud)

operator==嵌套类型的非成员的签名是B什么?以下天真的尝试不起作用:

template<typename T, typename V>
bool operator==(A<T>::B<V> left, A<T>::B<V> right);
Run Code Online (Sandbox Code Playgroud)

Clang,GCC和MSVC提供了各种不同的错误和/或提示错误,例如缺少template关键字,但我没有尝试解决它.

请注意,这显然有效:

template<typename T>
struct A
{
    template<typename V>
    struct B {};

    template<typename V>
    friend bool operator==(B<V> left, B<V> right)
    {
        return true;
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,我需要外部非成员声明的原因是使用qdoc记录它.qdoc正在使用clang来解析源代码,它要求我提供operator==我实际已经实现的声明,就像刚刚显示的那样.

现场演示

c++ templates clang qdoc

9
推荐指数
1
解决办法
185
查看次数

为什么Q_OBJECT破坏QDoc?

问题

从Qt 5.10升级到Qt 5.11之后,我开始遇到问题,无法使用QDoc为现有项目生成文档。

尽管源代码中存在相应的注释,但文档中缺少功能是许多问题之一。

研究

我设法将问题缩小到包含Q_OBJECT宏,如提供的代码示例所示(请参见下文)。

Qt文档中确实提到了这一点:

如果未由Cpp.ignoretokensCpp.ignoredirectives变量指定,则非标准构造(通常为宏)可能会导致错误的文档编制。

Q_OBJECT 但是不应被认为会引起问题,因为它会写得更远:

Q_OBJECT但是,该宏是一个例外:QDoc可以识别此特殊的非标准构造,因此无需使用Cpp.ignoredirectives变量进行指定。

无论如何,我都将其包含qt-cpp-defines.qdocconfqdocconf文件中。

我也尝试过手动添加Q_OBJECT到忽略列表

Cpp.ignoredirectives += Q_OBJECT
Run Code Online (Sandbox Code Playgroud)

但结果是一样的。

我体验Windows 10和Ubuntu 17下所描述的问题在Windows 7下我无法执行qdoc.exe在所有

qdocconf克服此问题的正确配置是什么?

最小的例子

为了快速重现(在实际情况下,声明和实现被拆分,并添加了适当的注释),请考虑以下设置:

oo

#include <QObject>

class Foo : public QObject
{
//  Q_OBJECT // <-- uncomment this to break QDoc
public:
    Foo() {}

    void boo() {}

protected:
    void moo() {}
};
Run Code Online (Sandbox Code Playgroud)

Foo.cpp

#include "Foo.h" …
Run Code Online (Sandbox Code Playgroud)

c++ qt qdoc qt5.11

5
推荐指数
1
解决办法
248
查看次数

标签 统计

c++ ×3

qdoc ×3

qt ×2

clang ×1

comments ×1

qt5.11 ×1

templates ×1