QML выводит дочерний элемент на передний план - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь реализовать способ поставить ListView перед родными братьями и сестрами (в случае ниже: пытаюсь заставить list показывать выше field элементов).При вводе «show» на любом элементе, кроме последнего, я бы хотел видеть list выше всех остальных.Я знаю, как работает визуальный родительский / дочерний стек QML, я просто хочу как-то обойти это.Я попытался изменить значение z, но это не сработало бы, поскольку отношение родитель / потомок имеет приоритет над слоями.Вот что я пытаюсь сделать.

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5

Window {
    width: 400
    height: 400
    visible: true

    ListView {
        anchors.fill: parent
        anchors.margins: 20

        model: ListModel {
            ListElement {
                text: "1"
            }
            ListElement {
                text: "2"
            }
            ListElement {
                text: "3"
            }
            ListElement {
                text: "4"
            }
            ListElement {
                text: "5"
            }
            ListElement {
                text: "6"
            }
        }
        delegate: Item {
            width: parent.width
            height: 40

            TextField {
                id: field
                anchors.fill: parent
                anchors.margins: 1
                text: model.modelData
            }
            z:2
            ListView {
                id: list
                anchors.top: field.bottom
                width: parent.width
                height: 200
                visible: field.text === "show"
                clip: true
                delegate: Text {
                    width: parent.width
                    height: 20
                    text: model.modelData
                }
                z:3

                model: ListModel {
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                    ListElement {
                        text: "11"
                    }
                }
            }
        }
    }
}

z значения, которые следует игнорировать, поскольку они не работают.

1 Ответ

1 голос
/ 16 апреля 2019

Вы должны увеличить z дочернего ListView и делегата основного ListView:

Window {
    width: 400
    height: 400
    visible: true
    ListModel{
        id: mymodel
        Component.onCompleted: {
            for(var i=1; i<7; i++){
                mymodel.append({"text": ""+i})
            }
        }
    }
    ListView {
        anchors.fill: parent
        anchors.margins: 20
        model: mymodel
        delegate: Item {
            QtObject{
                id: internal
                property bool isTop: field.text === "show"
            }
            width: parent.width
            height: 40
            z: internal.isTop ? 1: 0
            TextField {
                id: field
                anchors.fill: parent
                anchors.margins: 1
                text: model.modelData
            }
            ListView {
                id: childview
                anchors.top: field.bottom
                width: parent.width
                height: 200
                visible: internal.isTop
                z: visible ? 1: 0
                clip: true
                model: childmodel
                delegate: Text {
                    width: parent.width
                    height: 20
                    text: model.modelData
                }
                ListModel{
                    id:childmodel
                    Component.onCompleted: {
                        for(var i=1; i<10; i++){
                            childmodel.append({"text": "child"+i})
                        }
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...