Qt函数体中的Q_REVISION是什么?
我在qt源代码中看到了很多次。
我查看了Qt文档,发现this文档说:



这是什么意思?在哪里可以使用此Q_REVISION

最佳答案

到目前为止,它仅由QtQml使用,当您需要在QML中使用C++对象时,必须使用此语法进行注册。

qmlRegisterType<Foo>("MyModule", 1, 0, "Foo");

这样,您就可以将模块导入QML并使用Foo对象。
此语法向QML公开了所有标记为Q_REVISION(0)的方法和属性,如文档所述,这是默认值。

假设我们的类Foo具有多个修订版本。
class Foo : public QObject
{
    Q_OBJECT

    Q_PROPERTY(int normalProperty READ normalProperty)
    Q_PROPERTY(int newProperty READ newProperty REVISION 1)
    Q_PROPERTY(int newerProperty READ newerProperty REVISION 2)

public:
    Foo();
public slots:
    int normalProperty() { return 0; }
    Q_REVISION(1) int newProperty() { return 1; }
    Q_REVISION(2) int newerProperty() { return 2; }
};

通过使用以前的语法,我们将只能在QML中使用normalProperty,要使用其他版本,我们必须这样做。
qmlRegisterType<Foo, 1>("MyModule", 1, 1, "Foo");

注意模板参数的区别,前一个在类名之后没有修订号。增加模块的次要版本(这是函数的第三个参数)也是一种好习惯。
这样,您将能够在QML中使用normalPropertynewProperty
qmlRegisterType<Foo, 2>("MyModule", 1, 2, "Foo");

通过此调用,您将能够使用所有三个属性normalPropertynewPropertynewerProperty

您可以在QObject documentation上找到更多信息。

顺便问一句,我不知道这个宏。我希望我们俩都学到了新东西。 :)

关于c++ - Q_REVISION在Qt类中的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56699204/

10-11 23:09