2016-07-08 12 views
0

ich eine QML Datei Foo.qml haben:Component.onCompleted beschwert sich über "Nicht vorhandene befestigte Objekt"

import NDDView 1.0 

NDDView { 
    source: "nddcontent/Foo.uip" 
    Component.onCompleted: console.log("Yay!") 
} 

Die NDDView Komponente erbt von QQuickFramebufferObject. Als ich diese Komponente in meinem Projekt kompilieren und verwenden, erhalte ich die Fehlermeldung:

qrc:/Foo.qml:5 Non-existent attached object 
  • Warum bin ich diesen Fehler?
  • Wie kann ich stattdessen 'Setup' Code auf meiner Komponente ausführen?

Falls es wichtig ist, meine reale Komponente sieht eher wie folgt aus:

NDDView { 
    property var paths: ([]) 
    property int items: 20 
    property string prefix: "foo" 
    Component.onCompleted: { 
     for (var i=items;i--;) paths.push(prefix+i); 
    } 
} 

Ich versuche, prozedural ein Array zu füllen, wenn die Komponente instanziiert wird. Wenn es einen besseren/alternativen Weg gibt, diese Aufgabe ohne Component.onCompleted auszuführen, bin ich froh, es stattdessen zu verwenden.

+2

Importieren Sie entweder 'QtQml' oder' QtQuick', um den Typ 'Component' zur Verfügung zu stellen. – jpnurmi

+0

@jpnurmi Das hat es geschafft, danke! Bitte posten Sie als Antwort, damit ich Ihnen Kredit und Rep geben kann. – Phrogz

Antwort

3

Der Typ Component QML Type wird vom Modul QtQml registriert, und aus Gründen der Abwärtskompatibilität und aus Gründen der Zweckmäßigkeit auch vom Modul QtQuick. Um den Typ verfügbar zu machen, müssen Sie eines dieser Module importieren. Wenn daher QML Schreiben Anwendungen mit Qt 5, am meisten .qml Dateien beginnen mit entweder:

import QtQuick 2.0 // or later 

oder

import QtQml 2.0 // or later 

Die neueste Version hängt von der Qt-Version Sie verwenden, und wie alt Qt-Versionen du willst unterstützen. Das Importieren der neuesten Version, die zu Beginn jedes QML-Typs dokumentiert ist, ist erforderlich, wenn Sie Eigenschaften oder Methoden verwenden, die in der neuesten Version eingeführt wurden.