【问题标题】:Animate new items in a TableView为 TableView 中的新项目设置动画
【发布时间】:2015-12-14 17:01:46
【问题描述】:

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

因为模型总是新的,新表的加载在视觉上并不吸引人(所有条目都一次显示)。

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

可以在不从头开始重新实现rowDelegate 的情况下做到这一点吗?

【问题讨论】:

    标签: android qt qml qtquick2


    【解决方案1】:

    是的,有可能。

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

    附:此解决方案依赖于修改内部对象,不能保证跨不同的 Qt 版本或平台工作。

    【讨论】:

    • 如何检查this.__listView 是否存在以保持故障安全?
    • @marmistrz 检查一下!如果__listView 不存在,则可能是undefinednull
    【解决方案2】:

    没有。

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

    1. 找出所有行项目实例化的确切时间。
    2. 以某种方式通过导航子列表找到正确的行项目。

    此时,行项目有可能已经以全高显示,但假设不是这种情况,您需要动态创建一个 NumberAnimation,例如,然后为高度变化。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多