javascript - QML 和 C++ 中的 Null 和 Undefined

标签 javascript c++ qml qt5

当用 C++ 编写的自定义类型扩展 QML 时,我开始怀疑 JS 和 C++ 之间的区别。

这一次我想知道,如果 C++ 端的 null 检查就足够了,或者是否有我可能需要的类似“QUndefined”的东西也考虑一下。据我所见,这不是描述here .

换句话说:

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

最佳答案

您的答案肯定是正确的,但这里有一些更多信息。

写入属性时会发生什么取决于该属性是什么,例如,它是 QObject 属性吗?等等。根据属性的类型,您也可能在赋值时遇到错误(例如,如果您将 null 写入数字类型属性,如 double)。

为了得到答案,我们假设您在 QObject 上设置一个属性。如果该属性具有为 Q_PROPERTY 定义的 RESET 函数,您可以将其设置为 undefinedQuoting the documentation :

A RESET function is optional. It is for setting the property back to its context specific default value. e.g., QWidget::cursor has the typical READ and WRITE functions, QWidget::cursor() and QWidget::setCursor(), and it also has a RESET function, QWidget::unsetCursor(), since no call to QWidget::setCursor() can mean reset to the context specific cursor. The RESET function must return void and take no parameters.

更具体地说,如果您有一个具有RESET 功能的Q_PROPERTY,当您向该属性写入undefined 时,the RESET function will be called .

对于将属性设置为 null,答案位于最后一个引用的正上方,基本上,如果属性包含 QObject* 派生类型,it will store a 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 结束。

关于javascript - QML 和 C++ 中的 Null 和 Undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41586133/

相关文章:

c++ - 无法显示二进制搜索树C++

Qt开发以及OpenGL与QML页面的必要性

javascript - Google Maps API '.pac-item:first' 返回格式错误

javascript - 如何使响应式选项卡在移动 View 中下拉

javascript - emscripten:如何解决 UnboundTypeError

javascript - 在一个容器中我有文本和 img 标签,我怎样才能只用 js 或 jquery 获取文本

c++ - lua 5.2.1 Unresolved external 问题

java - 抽象数据类型命名约定 : (Dynamic) Array, Vector、Sequence、List、Container、Buffer

qt - 如何使非模态对话框窗口始终位于顶部?

qt - 如何设置手机存储卡的路径?