Qt / QML: Как сделать двунаправленный syn c ScrollView в QML? - PullRequest
0 голосов
/ 08 марта 2020

Я хочу синхронизировать c contentY двух прокручиваемых списков, как показано в этом упрощенном коде

Item {
    SplitView {
        orientation: Qt.Horizontal

        Component1 {
            id: left
            contentY: right.contentY
        }
        Component1 {
            id: right
            contentY: left.contentY
        } 
    }
}

//Component1.qml

Item {
    property alias contentY: component2.contentY

    Component2 {
        id: component2
    }
}

//Component2.qml

Item {
    property alias contentY: list.contentY

    ScrollView {
        ListView {
            id: list
        }
    }
} 

Это работает, когда я запускаю или перезагружаю QML-сцену и продолжаю прокручивать только в одном splitview. Однако, как только я начинаю прокручивать в другом просмотре списка, двунаправленная привязка нарушается, и contentY больше не синхронизируется c. Я могу только прокрутить списки просмотра отдельно друг от друга. Как я могу избежать этого? Есть ли лучший способ синхронизировать c contentY?

1 Ответ

0 голосов
/ 08 марта 2020

Я нашел решение, которое, кажется, работает:

Item {
    SplitView {
        orientation: Qt.Horizontal

        Component1 {
            id: left
            Binding {
                target: right
                property: "contentY"
                value: left.contentY
            }
        }
        Component1 {
            id: right
            Binding {
                target: left
                property: "contentY"
                value: right.contentY
            }
        } 
    }
}

//Component1.qml

Item {
    property alias contentY: component2.contentY

    Component2 {
        id: component2
    }
}

//Component2.qml

Item {
    property alias contentY: list.contentY

    ScrollView {
        ListView {
            id:list
        }
    }
}

Однако, если есть лучшее решение, я был бы рад узнать для любой подсказки:)

...