c++ - 如何将现有的 Q_PROPERTY 重新定义为 REQUIRED?
问题描述
目标
我有一个QQuickItem
派生的 C++ 类,Foo
并且我想确保在 QML 中使用它的任何人都会为该objectName
属性赋予一个值。在Foo
我重新定义这样的属性:
Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged REQUIRED)
由于objectNameChanged
不采用零参数,因此仅此一项就会导致错误。所以我还需要添加一个信号Foo
:
void objectNameChanged();
然后它编译没有错误。
问题
该文档指出:
在 QML 中,除非设置了所有 REQUIRED 属性,否则无法实例化具有 REQUIRED 属性的类。
但是,当我在 QML 中这样使用它时:
Foo {
// objectName: qsTr("test) <-- commented line
}
该程序编译并运行没有错误。
问题
有没有办法将objectName
或任何其他现有属性更改为required
?
解决方案
您可以做的是公开一个 qml 文件 Foo.qml ,其中包含
CppFoo {
required objectName
}
而不是将 C++ 类直接暴露给您的用户。例如,使用一个简单的 Item 执行此操作,然后在另一个文件中使用它会导致类似的错误
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 中没有根据需要标记父类的属性的功能。
推荐阅读
- python - 如何索引从 .csv 文件中读取的数组
- javascript - Google 表格脚本根据时间戳和列值删除行。为什么一个工作而不是另一个?
- json - 使用 JSON 从字典中的列表中提取数据
- python - 使用python InvalidFileException在excel load_workbook中写入.log:openpyxl不支持.log文件格式,请
- bash - 在 Shell 脚本中替换属性文件中的变量
- javascript - 在 [React] 中搜索/过滤数据表
- firebase - Firestore - 我做错了什么?
- python - 使用大量可能值 pandas 融化数据框的最有效方法
- r - 为什么我们需要在 tidymodels 中进行准备、烘焙和榨汁?
- python - 从具有零假设的列表中查找值的所有排列