QtQuick GridView анимация элементов - PullRequest
2 голосов
/ 10 апреля 2011

При изменении размера GridView и переупорядочении его элементов анимация этих элементов, похоже, не работает.

Здесь вы можете найти простой пример: http://pastebin.com/BgST6sCv
Если щелкнуть один из квадратов в примере, анимация запускается правильно. Но если вы измените размер окна так, что GridView должен переставить его элементы, анимация НЕ будет запущена.

Есть ли способ это исправить? Возможно без C ++?

EDIT:
Я использую Qt SDK 1.1, который в настоящее время содержит Qt 4.7.3

1 Ответ

2 голосов
/ 29 мая 2011

Этот код сделает это. По сути, вам нужно создать фиктивный элемент делегата, а затем создать внутри него другой элемент с такими же значениями ширины, высоты, x и y. Установите родительский элемент внутреннего элемента, чтобы быть вашим представлением сетки. Вот ваш код, измененный для анимации.

import QtQuick 1.0

Rectangle {
    id: mainRect
    width: 300; height: 400

    ListModel {
        id: appModel
        ListElement { modelcolor: "#FF0000"}
        ListElement { modelcolor: "#00FF00"}
        ListElement { modelcolor: "#0000FF"}
    }

    Component {
        id: appDelegate

        Item {
            id: main
            width: grid.cellWidth; height: grid.cellHeight
            Rectangle {
                id: item; parent: grid
                x: main.x; y: main.y
                width: main.width; height: main.height;
                color: modelcolor
                Behavior on x { NumberAnimation { duration: 400; easing.type: Easing.OutBack } }
                Behavior on y { NumberAnimation { duration: 400; easing.type: Easing.OutBack } }
            }
        }
    }

    GridView {
        id: grid
        anchors.fill: parent
        model: appModel
        delegate: appDelegate
        interactive: false
        MouseArea {
            anchors.fill: parent
            onClicked: {
                appModel.insert(1, { "modelcolor": "yellow" } )
            }
        }

    }
}
...