如何将现有的 Q_PROPERTY 重新定义为必需的?
How to redefine an existing Q_PROPERTY as REQUIRED?
目标
我有一个QQuickItem
derived C++ class, Foo
, and I would like to ensure, that whoever uses it in QML, gives a value to the objectName
属性。在 Foo
中,我重新定义 属性 是这样的:
Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged REQUIRED)
因为 objectNameChanged
不接受零参数,这本身就会导致错误。所以我还需要向 Foo
:
添加一个信号
void objectNameChanged();
然后编译没有错误。
问题
documetation 状态:
In QML, classes with REQUIRED properties cannot be instantiated unless all REQUIRED properties have been set.
然而,当我在 QML 中这样使用它时:
Foo {
// objectName: qsTr("test) <-- commented line
}
程序编译运行没有错误。
问题
有没有办法将 objectName
或任何其他现有的 属性 更改为 required
?
你可以做的是公开一个包含
的qml文件Foo.qml
CppFoo {
required objectName
}
而不是直接向您的用户公开 C++ class。例如,使用一个简单的项目执行此操作,然后在另一个文件中使用它会导致类似
的错误
file:///tmp/tmp.aOQi2yetXl/Foo.qml:3 Required property objectName was not initialized
事实是
Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged REQUIRED)
没有工作可能是引擎中的错误。目前在 C++ API 中没有功能可以根据需要标记父 class 的 属性。
目标
我有一个QQuickItem
derived C++ class, Foo
, and I would like to ensure, that whoever uses it in QML, gives a value to the objectName
属性。在 Foo
中,我重新定义 属性 是这样的:
Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged REQUIRED)
因为 objectNameChanged
不接受零参数,这本身就会导致错误。所以我还需要向 Foo
:
void objectNameChanged();
然后编译没有错误。
问题
documetation 状态:
In QML, classes with REQUIRED properties cannot be instantiated unless all REQUIRED properties have been set.
然而,当我在 QML 中这样使用它时:
Foo {
// objectName: qsTr("test) <-- commented line
}
程序编译运行没有错误。
问题
有没有办法将 objectName
或任何其他现有的 属性 更改为 required
?
你可以做的是公开一个包含
的qml文件Foo.qmlCppFoo {
required objectName
}
而不是直接向您的用户公开 C++ class。例如,使用一个简单的项目执行此操作,然后在另一个文件中使用它会导致类似
的错误file:///tmp/tmp.aOQi2yetXl/Foo.qml:3 Required property objectName was not initialized
事实是
Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged REQUIRED)
没有工作可能是引擎中的错误。目前在 C++ API 中没有功能可以根据需要标记父 class 的 属性。