Подтвердить что ты не робот

Как установить альтернативные цвета для элементов ListView в QML

Можно ли назначить 2 цвета альтернативным элементам ListView в QML? Я хочу, чтобы цвет элемента 1-го списка был черным, затем вторым элементом списка, как синий, затем 3-й элемент как черный, затем 4-й элемент как синий и так далее...

Как добиться этой цели в qml? Пожалуйста, поделитесь своими мыслями. Спасибо.

4b9b3361

Ответ 1

Вы можете использовать свойство index делегата, чтобы определить, является ли этот элемент делегата четным или нечетным, и использовать его для изменения цвета делегата.

ListView {
  anchors.fill: parent
  model: 3

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

Ответ 2

Я пробовал в своем коде что-то вроде следующего. Потому что мне нужен был тот же стиль в другом месте в коде. Поэтому я просто создал функцию.

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

Ответ 3

Я рекомендую вам использовать "model.index" - это точно так же, но делает ваш код намного понятнее. Кстати, из-за этого

var colors = [ "# E4DDE8", "# 00000000" ];

каждый раз, когда вы вызываете "altColor", будет создан новый массив. Очень неэффективно. Переместить объявление массива в представление списка:

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

Ответ 4

Хотя вопрос уже отвечает, вы все равно можете определить свойство для 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
}