自定义QML对象,其中包含可写的QString数组作为属性

时间:2014-01-16 16:23:10

标签: c++ qml qt5

我正在尝试创建一个自定义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示例都没有实现可写列表。

任何建议都将不胜感激

2 个答案:

答案 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.

:(