2014-01-16 52 views
0

我試圖創建QString(s)數組的自定義QML對象的屬性。這些將是從QML到C++代碼的文件路徑。具有QString(s)可寫數組作爲屬性的自定義QML對象

當我嘗試寫對象我得到的錯誤:

OgreResourceGroup 
{ 
    locations: [ "C:\Client\resources" ] 
} 

的位置屬性聲明:

Q_PROPERTY(QQmlListProperty<QString> locations READ getLocations WRITE setLocations NOTIFY locationsChanged) 

portal.qml:56: Unable to assign QVariantList to [unknown property type] 

拋出錯誤的QML

自定義對象中的C++寫入方法:

void setLocations(const QQmlListProperty<QString>& list); 

javascript是創建一個變體數組而不是一個QStrings數組? 如果是這樣,你如何實例化一個QString?

我看過的Qt例子都沒有實現可寫列表。

任何建議,將不勝感激

回答

0

Qt的文檔有一個句子,表示這不能做:

Generally this constructor should not be used in production code, as a writable QList violates QML's memory management rules. 

:(

1

首先,你不能有「QQmlListProperty」 QmlEngine寫入的只是一個特殊的對象,它應該被認爲是引用。

其次,你只能使用派生自QObj的類型ect和QString不。

所有JSON對象都由Javascript引擎在內部保存,當賦值給屬性時,會轉換爲QVariant(數組具有類型QMetaType :: QVariantList和對象QMetaType :: QVariantMap)。

您應該只使用QVariant,QVariantList或QStringList。

+0

QString在QML引擎中註冊。他們說這是可用的JavaScript,但我從來沒有見過實例化QString的能力 – Jay

+1

@Jay QString被轉換爲JavaScript本地字符串。 – Arpegius

相關問題