2016-06-02 9 views
3

Ich versuche, eine Karte in einer Funktion in QML zu erstellen. Ich versuchte dies:Ist es nicht möglich, einen Map-Datentyp in QML zu erstellen?

var myMap= new Map() 
    var length = myArray.count 
    for (var i = 0; i < length; i++) 
     myMap.set(i, true) 

Es ist nicht an der Erstellung der Karte nicht beschweren sich, aber die Set-Methode. Dies ist, was die Anwendung Ausgänge während der Laufzeit:

TypeError: Property 'set' of object is not a function 

habe ich dies als meine Referenz für verfügbare Methoden der Karte:

Map documentation

Es ist wie QML sieht nicht den Aufruf die Set-Methode nicht unterstützt . Ich habe versucht, eine Dokumentation darüber zu finden, was QML tut und nicht unterstützt, aber ich konnte es nicht finden. Dies macht es schwierig zu wissen, wie ich nicht herausfinden kann, bevor nach Ich habe den Code geschrieben und ausgeführt.

Kann jemand Map in QML verwenden und/oder wissen, wo es eine Dokumentation darüber gibt, welche Javascript-Funktionalität QML unterstützt?

+0

Welche Version des Qt verwenden Sie? –

+0

@FilipHazubski 5.6 – Phat

+0

Also QML unterstützt einfach nicht 'Map.set()' -Funktion. Das ist bedauerlich. –

Antwort

3

Ich vermute, Sie sind Missverständnis what's the Map object in QML.
Ich vermute stark, dass das nicht das ist, was Sie erwarten.

Stattdessen hat QML automatic type conversion between QVariantMap and JavaScript object.

Das bedeutet, dass Sie sich bei der Arbeit in einer QML-Umgebung auf einfache JavaScript-Objekte und ihr Schlüsselwertmodell verlassen sollten und eine Karte erstellen möchten.

Es ist eine Sache, dies zu tun:

var myMap= { }; 
var length = myArray.count; 
for (var i = 0; i < length; i++) 
    myMap[i] = true; 
+0

Vielen Dank. Ich sehe jetzt, dass QML den Map-Datentyp (und seine Methoden, die eine Sache in Javascript ist) nicht unterstützt. Ich denke, ich muss stattdessen auf einen Objekttyp zurückgreifen. Erstellen und exponieren Sie schließlich eine C++ - Klasse, die QMap QML umhüllt. – Phat

1

Ich denke, dass vorherige Version meiner Antwort nicht korrekt war.

Wie ich alle JS-Objekte verstehe, sind Eigenschaften und Funktionen, die in QML verwendet werden können, aufgeführt here. Die ECMA-262-Spezifikation steht nur für den Verweis auf die in den Dokumenten aufgeführten Objekte und nichts anderes. Sie können das Objekt Map leider nicht korrekt verwenden.