如何将现有的 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 的 属性。