我正在尝试创建一个自定义QML对象的属性,该对象将是一个QString数组。这些是从QML传递到c ++代码的文件路径。
当我尝试写入对象时,我收到错误:
portal.qml:56: Unable to assign QVariantList to [unknown property type]
抛出错误的qml:
OgreResourceGroup
{
locations: [ "C:\Client\resources" ]
}
地点的属性声明:
Q_PROPERTY( QQmlListProperty<QString> locations READ getLocations WRITE setLocations NOTIFY locationsChanged )
自定义对象中的C ++写入方法:
void setLocations( const QQmlListProperty<QString>& list );
javascript是否正在创建变体数组而不是QStrings数组? 如果是这样,你如何实例化QString?
我所看到的Qt示例都没有实现可写列表。
任何建议都将不胜感激
答案 0 :(得分:1)
首先你不能让“QQmlListProperty”可写。它只是一个特殊的对象,应该被视为QmlEngine写入的参考。
其次,您只能使用从QObject派生的类型,而QString则不能。
所有JSON对象都在内部由Javascript引擎保留,当有属性赋值时,转换为QVariant(数组具有类型QMetaType :: QVariantList,对象QMetaType :: QVariantMap)。
您应该只使用QVariant,QVariantList或QStringList。
答案 1 :(得分:0)
Qt文档有一句话表明无法做到这一点:
Generally this constructor should not be used in production code, as a writable QList violates QML's memory management rules.
:(