在TableView中为新项目设置动画

时间:2015-09-17 17:53:32

标签: android qt qml qtquick2

我正在使用TableView来显示SQLite数据库的内容。用户单击其中一个可检查按钮,并通过LocalStorage API读取右表。因此,模型总是新的。

因为模型总是新的,所以新表的加载在视觉上不具吸引力(所有条目都会立即显示)。

我的想法是在添加行时以行为高度设置动画(从0开始以线性方式)

这可以在不重新实现rowDelegate从头开始的情况下完成吗?

2 个答案:

答案 0 :(得分:3)

是的,这是可能的。

TableView使用ListView作为内部对象。您可以使用属性__listView访问它。

使用ListView,可以指定视图中的项目因修改视图模型而发生更改时应应用的过渡。

Transition {
    id: populateTransition
    NumberAnimation { properties: "y"; duration: 300 }
}

TableView {
    TableViewColumn {
        role: "title"
        title: "Title"
        width: 100
    }
    model: libraryModel
    Component.onCompleted: {
        this.__listView.populate = populateTransition
        this.__listView.add = populateTransition
    }
}

P.S。此解决方案依赖于修改内部对象,并且无法保证在不同的Qt版本或平台上工作。

答案 1 :(得分:0)

没有

这将是令人难以置信的hacky。我想它会是这样的(假设只有QML):

  1. 查找实例化所有行项目的确切时间。
  2. 通过浏览子项列表以某种方式找到正确的行项目。
  3. 此时行项目可能已经显示为全高,但假设情况并非如此,那么您需要动态创建NumberAnimation,例如,然后动画高度变化。

    最好使用支持转换的TableView创建自己的ListView