QtQuick GridView 元素动画

发布于 2024-10-31 20:59:26 字数 308 浏览 4 评论 0原文

当 GridView 大小调整并且其元素重新排列时,该元素的动画似乎不起作用。

在这里您可以找到一个简单的示例:http://pastebin.com/BgST6sCv
如果单击示例中的一个方块,动画就会正确触发。 但是,如果您调整窗口大小,以便 GridView 必须重新排列其元素,则不会触发动画。

有办法解决这个问题吗?可能没有任何C++?

编辑:
我正在使用 Qt SDK 1.1,其中包含 Qt 4.7.3 目前

When a GridView is resized and it's elements get rearranged the animations of that elements don't seem to work.

Here you can find a simple example: http://pastebin.com/BgST6sCv
If one of the squares in the example is clicked the animation is triggered properly.
But if you resize the window so that the GridView must rearrange it's elements the animation is NOT triggered.

Is there a way to fix that? Possibly without any C++?

EDIT:
I'm using the Qt SDK 1.1 which contains Qt 4.7.3 at the moment

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

囚你心 2024-11-07 20:59:27

这段代码就可以做到。基本上,您需要创建一个虚拟委托项目,然后在其中创建另一个具有相同宽度、高度、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" } )
            }
        }

    }
}

This code will do it. Basically you need to create a dummy delegate item and then create another item inside that that has the same width, height, x and y values. Set the parent of the inside item to be your grid view. Here's your code modified to animate nicely.

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" } )
            }
        }

    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文