私はQMLを使用しており、SplitViewに要素を動的に追加したいと考えています。 onMouseClick、しかしこれまで私は答えを見つけられませんでした。QMLのSplitViewに動的に要素を追加
私が今までに見つけたのは、SplitView
のデフォルトプロパティが、最初の子のdata
プロパティに設定されていることです。だから私は、その子に設定された親を持つ新しい動的に作成されたコンポーネントを試して追加する必要があると思います(splitView1.children[0]
)。残念ながらそれはどちらもうまくいかない。コンポーネントのロードが完了した後、その最初の子要素の子の数はゼロになります(SplitLayoutのComponent.onCompletedイベントがそれらの子を別の場所に移動させる関数を呼び出すようです)。したがって、追加された子はレンダリングされません(レイアウトに関連付けられたプロパティのいずれにも応答しません)。
次のコードスニペットをご覧ください。
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
}
}
}
は私が動的に作成されたコンポーネントは、静的に追加されたものをとSplitView
で正しく表示することができます方法はありますか?
これは非常に貧弱なソリューションです。事前に必要なオブジェクトの数を知っておく必要がありますが、これはまれです。 – cmannett85