你的答案肯定在正确的轨道上,但这里有更多的信息.
写入属性时会发生什么取决于该属性是什么,例如,它是否是QObject属性?根据属性的类型,您也可能在赋值时遇到错误(例如,如果您将null写入数字类型属性,如double).
让我们假设,为了你在QObject上设置属性的答案.如果属性具有为Q_PROPERTY定义的RESET函数,则可以将其设置为undefined. Quoting 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.
你问的最后一种情况是为C端的属性赋值null.出于意图和目的,我假设你在问这样一个案例:
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();
}
在这种情况下,此属性的QML端(myInstanceId.myThing)将从内存中以null结尾.