模型/视图委托组件公共部分

时间:2016-07-16 09:32:22

标签: c++ qt model-view-controller qml qtquick2

我有一个继承自QAbstractListModel的自定义c ++模型类。作为一种观点,我使用GridView。 因此GridView构建与QAbstractItemModel::rowCount()一样多的组件。但作为代表我 使用复杂的组件。随着"复杂"我的意思是它有动画。

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: 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)。还有一个绑定机制在运行 背景?或者有什么魔法吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

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