我正在使用QML,我想将元素动态添加到SplitView中。 onMouseClick,但到目前为止,我还没有找到答案。

到目前为止,我发现SplitView的默认属性设置为它的第一个 child 的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中?

最佳答案

该API似乎不提供对新元素的动态插入的支持。即使您确实可以使用它,也将是一个hack,并且可能会在将来的发行版中崩溃。您可能需要滚动自己的控件以模仿所需的行为。理想情况下,它应该由某种模型支持。

关于qt - 在QML中将元素动态添加到SplitView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17923811/

10-12 18:43