Sto lavorando con QML e voglio aggiungere elementi a SplitView dinamicamente ad es. onMouseClick, ma finora non ho trovato la risposta.Aggiungere elementi dinamicamente a SplitView in QML
Quello che ho scoperto finora è che il SplitView
ha la proprietà di default impostata sulla proprietà data
del primo figlio. Quindi penso che dovrei provare ad aggiungere nuovi componenti creati dinamicamente con il genitore impostato su quel bambino (splitView1.children[0]
). Purtroppo non funziona neanche. Inoltre, il numero di figli di quel primo figlio è zero dopo il completamento del caricamento del componente (sembra che l'evento Component.onCompleted di SplitLayout richiami una funzione che sposta questi bambini da qualche altra parte). Pertanto i bambini aggiunti non eseguono il rendering (e non rispondono a nessuna delle proprietà associate al layout).
prega di consultare il seguente frammento di codice:
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
}
}
}
C'è un modo per rendere i componenti creati in modo dinamico rendono correttamente nel SplitView
come quelli aggiunti in modo statico?
Questa è una soluzione molto scarsa in quanto è necessario conoscere quanti oggetti sono necessari in anticipo, il che è raro il caso. – cmannett85