Изменить цвет SwipeDelegate при нажатии

У меня есть простое приложение Qt Quick, содержащее ListView с несколько SwipeDelegates.

import QtQuick 2.12
import QtQuick.Controls 2.15
import QtQuick.Window 2.12

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    ListView {
        id: list
        anchors.fill: parent

        model: ListModel {
            id: listView
            ListElement { name: "Element 1" }
            ListElement { name: "Element 2" }
            ListElement { name: "Element 3" }
            ListElement { name: "Element 4" }
        }

        delegate: SwipeDelegate {

            contentItem: Text {
                width: parent.width
                text: name
            }

            swipe.right: Label {
                id: deleteLabel
                text: qsTr("Delete")
                color: "white"
                verticalAlignment: Label.AlignVCenter
                padding: 12
                height: parent.height
                anchors.right: parent.right

                background: Rectangle {
                    color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"
                }
            }
        }
    }
}

Без установки какого-либо цвета фона они отображаются с серым фоном, который становится темнее, если я нажимаю (или нажимаю и удерживаю) элемент:

введите здесь описание изображения

Я хочу изменить этот «выделенный» цвет на что-то другое, например, на зеленый. Я надеялся, что установка цвета фона на основе события onPressed поможет мне, но добавление background: Rectangle { color: "green" } к SwipeDelegate в качестве теста полностью удаляет более темную «подсветку» при нажатии.

Есть ли способ настроить цвет подсветки?


person Michael Kotzjan    schedule 02.06.2021    source источник


Ответы (1)


Если это стиль, который поддерживает палитры, вы можете установить соответствующую роль палитры. Для стиля по умолчанию (Basic в Qt 6) назначается цвет фона вот так:

    color: Color.blend(control.down ? control.palette.midlight : control.palette.light,
                       control.palette.highlight, control.visualFocus ? 0.15 : 0.0)

Итак, если вы используете этот стиль, вы можете установить это свойство для делегата:

palette.midlight: "green"

Если стиль не поддерживает палитры, у вас есть несколько вариантов:

  1. Создайте привязку к соответствующему свойству.
  2. Назначьте цвет в Component.onCompleted.
  3. Напишите свой собственный фон.
person Mitch    schedule 02.06.2021
comment
Настройка палитры сработала! Большое спасибо, особенно за ссылки! - person Michael Kotzjan; 02.06.2021