Ich arbeite mit QML und möchte Elemente dynamisch in SplitView hinzufügen, zB. onMouseClick, aber bisher habe ich keine Antwort gefunden.Elemente dynamisch zu SplitView in QML hinzufügen
Was ich bisher herausgefunden habe, ist, dass die SplitView
ihre Standardeigenschaft auf die Eigenschaft data
des ersten Kindes hat. Also ich denke, ich sollte versuchen, neue dynamisch erstellte Komponenten mit dem übergeordneten Set zu diesem Kind hinzufügen (splitView1.children[0]
). Leider funktioniert das auch nicht. Darüber hinaus ist die Anzahl der untergeordneten Elemente dieses ersten untergeordneten Elements null, nachdem die Komponente geladen wurde (es scheint, als ob das Component.onCompleted-Ereignis von SplitLayout eine Funktion aufruft, die diese untergeordneten Elemente an eine andere Stelle verschiebt). Die hinzugefügten untergeordneten Elemente werden daher nicht gerendert (und reagieren nicht auf die angefügten Layout-Eigenschaften).
Bitte beachten Sie den folgenden Code-Schnipsel:
import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0
ApplicationWindow {
width: 600
height: 400
SplitView {
anchors.fill: parent
Rectangle {
id: column
width: 200
Layout.minimumWidth: 100
Layout.maximumWidth: 300
color: "lightsteelblue"
}
SplitView {
id: splitView1
orientation: Qt.Vertical
Layout.fillWidth: true
Rectangle {
id: row1
height: 200
color: "lightblue"
Layout.minimumHeight: 1
}
// Rectangle { //I want to add Rectangle to splitView1 like this one, but dynamicly eg.onMouseClick
// color: "blue"
// }
}
}
MouseArea {
id: clickArea
anchors.fill: parent
onClicked: {
console.debug("clicked!")
console.debug("len: " + splitView1.__contents.length); // __contents is the SplitView's default property - an alias to the first child's data property
var newObject = Qt.createQmlObject('import QtQuick 2.1; Rectangle {color: "blue"}',
splitView1, "dynamicSnippet1"); //no effect
// var newObject = Qt.createQmlObject('import QtQuick 2.1; import QtQuick.Layouts 1.0; Rectangle {color: "blue"; width: 50; height: 50}',
// splitView1, "dynamicSnippet1"); //rectangle visible, but not in layout(?) - not resizeable
}
}
}
Gibt es eine Möglichkeit, die dynamisch erstellten Komponenten ordnungsgemäß in den SplitView
als die statisch hinzugekommenen machen machen können?
Dies ist eine sehr schlechte Lösung, wie Sie wissen, wie viele Objekte, die Sie im Voraus benötigen, was selten der Fall ist. – cmannett85