2017-07-29 4 views
0

[EDIT] entfernen: Ich mag einige Steuerelemente entfernen, die dynamisch in Spalte QML Art erstellt werden, und auch, wie die Kinder eines Layouts zugreifen? .Following ist der Code, der nicht dynamisch ist und nur als Referenz:Wie ein dynamisch erstellte Element aus Spalte QML Elemente

import QtQuick 2.6 
import QtQuick.controls 2.2 

Item 
{ 
Column { 
    id:col 
    spacing: 2 

    //Initially Adding controls. 
    Rectangle { color: "red"; width: 50; height: 50 } 
    Rectangle { color: "green"; width: 20; height: 50 } 
    Rectangle { color: "blue"; width: 50; height: 20 } 
} 

Button 
{ 
    id:button 
    onClicked: 
    { 
     //How to remove a perticular element from above column which is created dynamically? 
    } 

} 

    // [EDIT] - Code to add controls dynamically to column. 
} 
+1

Mögliche Duplikat von [ Delete children of QML Grid] (https://stackoverflow.com/questions/8851164/delete-children-of-qml-grid) – m7913d

+2

Ich würde normalerweise vorschlagen, einen datengesteuerten Ansatz zu wählen ('Repe äter 'usw.) anstatt Elemente manuell zu erstellen und zu zerstören. – peppe

+0

@ m7913d sollten Sie sich nie auf den Garbage Collector verlassen. Es funktioniert nur dann zuverlässig, wenn Sie 'component.createObject (null)' verwenden und dann Ihr Objekt zu zufälligen Zeiten zuverlässig zerstören, höchstwahrscheinlich bevor es weg sein soll, da die Referenzzählung unterbrochen ist. Wenn es zu selten ausgeführt wird, wird Ihre Anwendung abstürzen, sobald es ausgeführt wird. Wenn Sie 'component.createObject (someParent)' verwenden, wird es überhaupt nicht funktionieren. Dann ist es Ihre Verantwortung, es mit 'instance.destroy()' zu zerstören. Aus den oben genannten Gründen ist dies der einzige vernünftige Weg, mit dynamischer Instanziierung von JS umzugehen. – derM

Antwort

1

// Wie perticular Element von oben Spalte entfernen?

Verwenden Sie den unten genannten Code [Referenz: https://stackoverflow.com/a/8852535/3459185]:

col.children[index_to_destroy].destroy() 

[EDIT] Beispielcode zum Hinzufügen und Löschen Elemente dynamisch in einer Spalte:

Item 
{ 
    ListModel { 
     id: elementModel 
     ListElement { elementColor: "red"; elementWidth: 50; elementHeight: 50} 
     ListElement { elementColor: "green"; elementWidth: 20; elementHeight: 50} 
     ListElement { elementColor: "blue"; elementWidth: 50; elementHeight: 20} 
    } 

    Column { 
     id:col 
     spacing: 2 
     Repeater { 
      model: elementModel 
      Rectangle { color: elementColor; width: elementWidth; height: elementHeight } 
     } 
    } 

    Button 
    { 
     id: deleteButton; x: 200; y: 200; height: 50; width: 50; text: "Delete" 
     onClicked: 
     { 
      //How to remove perticular element from above column ? 
      elementModel.remove(index) 
     } 
    } 

    Button 
    { 
     id: addButton; x: 400; y: 200; height: 50; width: 50; text: "Add" 
     onClicked: 
     { 
      // Code to add controls dynamically to column. 
      elementModel.insert(index, { "elementColor": "red", "elementWidth": 50, "elementHeight": 50}) 
     } 

    } 
} 
+0

@ m7913d - für etwas, das "nicht erlaubt" ist, scheint es ziemlich gut zu funktionieren. – dtech

+0

@dtech Wenn Sie der Dokumentation nicht folgen, kann es (scheint) jetzt funktionieren, aber es gibt keine Garantie, dass es in der funktioniert Zukunft. (Beachten Sie, dass [Atrons Antwort] (https://stackoverflow.com/a/32047782/7621674) jetzt irrelevant ist, da das OP angegeben hat, dass er dynamisch erstellte Objekte verwendet.) – m7913d

+1

Ich arbeite an einem Projekt, das weitgehend auf Modifizieren und sogar das Entfernen von Objekten, die über deklarativen Code instanziiert werden, und tonnenweise Tests ohne offensichtliche Probleme. Es gibt auch die Möglichkeit, dass die Dokumentation falsch ist, oder vielleicht spezifische Fälle, ohne sie zu erwähnen. Denken Sie daran, dass die Dokumentation keine "absolute göttliche Wahrheit" ist und genauso anfällig für Fehler ist wie jeder andere Code. In der Tat war Qt 5-Dokumentation bis Version 5.4 oder so horrend fehlerhaft. – dtech

Verwandte Themen