如何在QML中为ListView项设置备用颜色

时间:2012-11-23 05:47:05

标签: qt qml

是否可以为QML中的备用ListView项目分配2种颜色?我想将第1个列表项目涂成黑色,然后将第2个列表项目涂成蓝色,然后将第3个项目涂成黑色,然后将第4个项目涂成蓝色,依此类推......

如何在qml中实现这个功能?请分享你的想法。 感谢。

4 个答案:

答案 0 :(得分:37)

您可以使用委托的索引属性来确定此委托元素是偶数还是奇数,并使用它来更改委托的颜色。

ListView {
  anchors.fill: parent
  model: 3

  delegate:
    Rectangle {
        width: 20
        height: 30
        color: index % 2 == 0 ? "blue" : "black"
    }
}

答案 1 :(得分:1)

我在代码中尝试了类似下面的内容。因为我需要在代码中的不同位置使用相同的样式。所以我刚创建了一个函数。

 ListView {
      anchors.fill: parent
      model: 3

      delegate:
        Item{
           function altColor(i) {
              var colors = [ "#E4DDE8", "#00000000" ];
              return colors[i];
           }
           Rectangle {
              width: 20
              height: 30
              color: altColor(index % 2)
           }
      }
}

答案 2 :(得分:0)

我建议您使用“model.index” - 它完全相同,但使您的代码更容易理解。 顺便说一下,因为那个

  

var colors = [“#E4DDE8”,“#00000000”];

每次调用“altColor”时,都会创建新数组。非常低效。将数组声明移动到列表视图:

property var colors: ["#E4DDE8", "#00000000"]

答案 3 :(得分:0)

虽然问题已经回答,但你仍然可以为Listmodel定义一个保持颜色的属性

ListModel {
    id: fruitModel

    ListElement {
        name: "Apple"
        cost: 2.45
        elementColor: "red"
    }
    ListElement {
        name: "Orange"
        cost: 2.45
        elementColor: "black"
    }
    ListElement {
        name: "Banana"
        cost: 2.45
        elementColor: "gray"
    }
}

并在代表中显示:

Rectangle{
    anchors.fillIn:parent
    color: elementColor
}