1. Objekte dynamisch erstellenEs gibt zwei Möglichkeiten, Objekte dynamisch aus JavaScript zu erstellen:
Obwohl dynamisch erstellte Objekte wie andere Objekte verwendet werden können, haben sie in QML keine IDs. 1.1. Komponenten dynamisch erstellen Sie können die Methode Das erste ist das übergeordnete Objekt des neuen Objekts. Das übergeordnete Objekt kann ein grafisches Objekt (d. h. vom Typ „Item“) oder ein nicht grafisches Objekt (d. h. vom Typ „QtObject“ oder „C++ QObject“) sein. Nur Grafikobjekte mit einem übergeordneten Grafikelement werden auf Sprite.qml Es definiert eine einfache QML-Komponente: QtQuick 2.0 importieren Rechteck { Breite: 80; Höhe: 50; Farbe: "rot" } main.qml importiert eine JavaScript-Datei componentCreation.js, die das Sprite-Objekt erstellt: QtQuick 2.0 importieren importiere "componentCreation.js" als MyScript Rechteck { ID: App-Fenster Breite: 300; Höhe: 300 Komponente.beiAbgeschlossen: MyScript.createSpriteObjects(); } componentCreation.js var-Komponente; var-Sprite; Funktion createSpriteObjects() { Komponente = Qt.createComponent("Sprite.qml"); wenn (Komponente.status == Komponente.Bereit) Erstellung beenden(); anders Komponente.statusGeändert.Verbinden(Erstellung beenden); } Funktion finishCreation() { wenn (Komponente.status == Komponente.Bereit) { sprite = Komponente.ErstellenObjekt(Anwendungsfenster, {x: 100, y: 100}); wenn (Sprite == null) { console.log("Fehler beim Erstellen des Objekts"); } } sonst wenn (Komponente.status == Komponente.Fehler) { console.log("Fehler beim Laden der Komponente:", component.errorString()); } } Bei Verwendung von Dateien mit relativen Pfaden sollten die Pfade relativ zur Datei sein, die Darüber hinaus ist es möglich, Komponenten ohne Blockierung über die Funktion 1.2. Objekte aus QML-Strings erstellenQML-Objekte können aus einem QML-String mit der Funktion Qt.createQmlObject() erstellt werden, wie im folgenden Beispiel gezeigt: const neuesObjekt = Qt.createQmlObject(` QtQuick 2.0 importieren Rechteck { Farbe: "rot" Breite: 20 Höhe: 20 } `, übergeordnetesElement, „meinDynamicSnippet“ );
Wenn die QML-Zeichenfolge einen relativen Pfad zum Dateiimport verwendet, sollte der Pfad relativ zur Datei sein, die das übergeordnete Objekt definiert (das zweite Argument der Methode). Beim Erstellen einer statischen QML-Anwendung werden die QML-Dateien gescannt, um Importabhängigkeiten zu erkennen. Auf diese Weise werden alle erforderlichen Plugins und Ressourcen zur Kompilierungszeit aufgelöst. Dabei werden jedoch nur explizite Importanweisungen (die am Anfang einer QML-Datei stehen) berücksichtigt, nicht Importanweisungen, die in Zeichenfolgenliteralen enthalten sind. Um statische Builds zu unterstützen, müssen Benutzer sicherstellen, dass QML-Dateien, die 2. Objekte dynamisch löschenIn vielen Benutzeroberflächen reicht es aus, die Deckkraft eines visuellen Objekts auf 0 zu setzen oder das visuelle Objekt vom Bildschirm zu verschieben, anstatt es zu entfernen. Wenn jedoch eine große Anzahl dynamisch erstellter Objekte vorhanden ist, kann das Löschen nicht verwendeter Objekte wertvolle Leistungsvorteile bringen.
Elemente können mit Beispiel. anwendung.qml QtQuick 2.0 importieren Artikel { ID: Container Breite: 500; Höhe: 100 Komponente.beiAbgeschlossen: { var Komponente = Qt.createComponent("SelfDestroyingRect.qml"); für (var i=0; i<5; i++) { var Objekt = Komponente.createObject(Container); Objekt.x = (Objekt.Breite + 10) * i; } } } SelfDestroyingRect.qml QtQuick 2.0 importieren Rechteck { ID: rechteckig Breite: 80; Höhe: 80 Farbe: "rot" NumberAnimation bei Deckkraft { bis: 0 Dauer: 1000 bei Ausführungsänderung: { wenn (!läuft) { console.log("Zerstören...") rechteck.destroy(); } } } } Alternativ kann
Beachten Sie auch, dass die SelfDestroyingRect-Instanz statisch wie folgt erstellt wird: Artikel { Selbstzerstörendes Rechteck { // ... } } Dies führt zu Fehlern, da ein Objekt nur dann dynamisch zerstört werden kann, wenn es dynamisch erstellt wurde. Mit Qt.createQmlObject() erstellte Objekte können auf ähnliche Weise mit destroy() zerstört werden: const neuesObjekt = Qt.createQmlObject(` QtQuick 2.0 importieren Rechteck { Farbe: "rot" Breite: 20 Höhe: 20 } `, übergeordnetesElement, „meinDynamicSnippet“ ); neuesObjekt.zerstören(1000); Dies ist das Ende dieses Artikels zum Erstellen dynamischer QML-Objekte in Das könnte Sie auch interessieren:
|
<<: Beispiel für einen Fork- und Mutex-Lock-Prozess im Linux-Multithreading
>>: So erhalten Sie die dynamische Anzahl der verbleibenden Wörter im Textbereich
Stellen Sie die MySQL-Umgebung lokal bereit (192....
BEM von QQtabBar Zunächst einmal: Was bedeutet BE...
Verwenden Sie reines CSS, um die Hintergrundfarbe...
Möglicherweise verwenden Sie hier Include-Dateien,...
Inhaltsverzeichnis 1. Virtueller Host 1.1 Virtuel...
1. Laden Sie zunächst die entsprechende Datenbank...
Warum müssen wir die Browserkompatibilität von CS...
Gemäß dem Koeffizienten von Pi und dem Radius der...
Inhaltsverzeichnis 1. Problem 2. Lösung 1. Deklar...
js interessanter Countdown-Fall. Zu Ihrer Informa...
Wirkung Das Wirkungsdiagramm sieht wie folgt aus ...
Vorwort Bei einer datenzentrierten Anwendung wirk...
Der Code kann noch weiter optimiert werden. Aus Z...
Schritt Platzieren Sie die vorbereiteten statisch...
Inhaltsverzeichnis 1. MySQL-Architektur 2. Netzwe...