Model/View委托组件公共部分

Model/View delegate component common parts

我有一个自定义的 C++ 模型 class,它继承自 QAbstractListModel. And as a view I use GridView。 所以GridView constructs as many components as QAbstractItemModel::rowCount()。但作为代表我 使用复杂的组件。 "complex" 我的意思是它有动画。

property bool animate: false
delegate: Rectangle {
    SequentialAnimation on color {
        running: view.animate
        loops: Animation.Infinite
        ColorAnimation { from: "blue"; to: "#33FFFF"; duration: 1200 }
        ColorAnimation { from: "#33FFFF"; to: "blue"; duration: 1200 }
    }
}

我想问的是,要不要把delegate的公共部分往上移一层,用binding和 忍受信号和槽机制的开销,而不是构造不必要的动画对象 对于所有模型元素?

delegate: Rectangle {
    color: view.delegateColorAnimation
}
property bool animate: false
property color delegateColorAnimation
SequentialAnimation on delegateColorAnimation {
    running: animate
    loops: Animation.Infinite
    ColorAnimation { from: "blue"; to: "#33FFFF"; duration: 1200 }
    ColorAnimation { from: "#33FFFF"; to: "blue"; duration: 1200 }
}

我知道信号和槽机制的开销可以忽略不计,但我很困惑,因为特殊的 动画语法 (Animation on property)。是否还有绑定机制运行 背景?还是有什么魔力?

如果这个语法没有任何魔力,更新 属性 仍然依赖于绑定机制, 可能第二种选择更好?

'on' 语法解释如下:http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html#property-value-sources

我会选择更少的 Animation 个对象,因为现在都是关于缓存友好性的,所以使用更少的内存更好。

第二个选项计算一次动画,而第一个选项对每个项目执行一次。