11

私は 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を静的に追加されたコンポーネントとして適切にレンダリングする方法はありますか?

4

4 に答える 4

2

QtQuick Controls 1.3 の時点でSplitViewaddItem(item) メソッドがあります。

于 2015-01-04T12:10:14.637 に答える
0

SplitView のソース コードを見たところ、Component.onCompleted シグナルが送信されると、各分割領域が計算されます。ですから、そこがキーポイントだと思います。どのようにしても(挿入、動的作成)。分割用の新しいリージョンを挿入した後、リージョンはリセットされません。

于 2014-09-29T04:00:47.220 に答える