我正在使用 QML,我想动态地将元素添加到 SplitView,例如。onMouseClick,但到目前为止我还没有找到答案。
到目前为止,我发现SplitView它的默认属性设置为它的第一个孩子的data属性。所以我想我应该尝试添加新的动态创建的组件,并将父级设置为该子级(splitView1.children[0])。不幸的是,这也不起作用。更重要的是,在组件完成加载后,第一个孩子的孩子数量为零(似乎 SplitLayout 的 Component.onCompleted 事件调用了一个将这些孩子移动到其他地方的函数)。因此,添加的子项不会呈现(并且不会响应任何 Layout 附加属性)。
请看下面的代码片段:
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静态添加的组件中正确呈现?