当前位置:  开发笔记 > 编程语言 > 正文

QML和C++中的Null和Undefined

如何解决《QML和C++中的Null和Undefined》经验,为你挑选了1个好方法。

在使用C++编写的自定义类型扩展QML时,我开始怀疑JS和C++之间的差异.

这次我想知道,如果nullC++方面的检查是否足够,或者是否有类似QUndefined"我"可能需要考虑的事情.至于我可以看到,这是不是说明这里.

或者换句话说:

当我undefined在QML端设置属性时,在C++端会发生什么

当我null在QML端设置属性时,在C++端会发生什么

当我null在C++端设置属性时,QML端会发生什么

Robin Burche.. 13

你的答案肯定在正确的轨道上,但这里有更多的信息.

写入属性时会发生什么取决于该属性什么,例如,它是否是QObject属性?根据属性的类型,您可能还会在赋值时遇到错误(例如,如果您正在写入null像double这样的数字类型属性).

让我们假设,为了答案你要在a上设置属性QObject.undefined如果属性具有RESET为Q_PROPERTY定义的函数,则可以将其设置为.引用文档:

RESET功能是可选的.它用于将属性设置回其特定于上下文的默认值.例如,QWidget :: cursor有典型的READ和WRITE函数,QWidget :: cursor()和QWidget :: setCursor(),它还有一个RESET函数,QWidget :: unsetCursor(),因为没有调用QWidget :: setCursor()可以表示重置为特定于上下文的游标.RESET函数必须返回void并且不带参数.

更具体地说,如果你有一个具有RESET函数的Q_PROPERTY ,当你写入undefined该属性时,将调用该RESET函数.

要将属性设置为null,答案位于最后一个引用的正上方,基本上,如果属性包含QObject*-derived类型,它将存储一个nullptr.

你问的最后一个案例是分配null给C++方面的属性.出于意图和目的,我假设你在问这样一个案例:

Q_PROPERTY(QObjectDerived* myThing READ myThing NOTIFY myThingChanged);

...

QObjectDerived *myThing() { return m_myThing; }

...

void somethingElse() {
    m_myThing = 0; // or NULL, nullptr, whatever floats your boat
    emit myThingChanged();
}

在这种情况下,此属性(myInstanceId.myThing)的QML 端null将从内存中结束.



1> Robin Burche..:

你的答案肯定在正确的轨道上,但这里有更多的信息.

写入属性时会发生什么取决于该属性什么,例如,它是否是QObject属性?根据属性的类型,您可能还会在赋值时遇到错误(例如,如果您正在写入null像double这样的数字类型属性).

让我们假设,为了答案你要在a上设置属性QObject.undefined如果属性具有RESET为Q_PROPERTY定义的函数,则可以将其设置为.引用文档:

RESET功能是可选的.它用于将属性设置回其特定于上下文的默认值.例如,QWidget :: cursor有典型的READ和WRITE函数,QWidget :: cursor()和QWidget :: setCursor(),它还有一个RESET函数,QWidget :: unsetCursor(),因为没有调用QWidget :: setCursor()可以表示重置为特定于上下文的游标.RESET函数必须返回void并且不带参数.

更具体地说,如果你有一个具有RESET函数的Q_PROPERTY ,当你写入undefined该属性时,将调用该RESET函数.

要将属性设置为null,答案位于最后一个引用的正上方,基本上,如果属性包含QObject*-derived类型,它将存储一个nullptr.

你问的最后一个案例是分配null给C++方面的属性.出于意图和目的,我假设你在问这样一个案例:

Q_PROPERTY(QObjectDerived* myThing READ myThing NOTIFY myThingChanged);

...

QObjectDerived *myThing() { return m_myThing; }

...

void somethingElse() {
    m_myThing = 0; // or NULL, nullptr, whatever floats your boat
    emit myThingChanged();
}

在这种情况下,此属性(myInstanceId.myThing)的QML 端null将从内存中结束.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有