按下时更改 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"
                }
            }
        }
    }
}

如果不设置任何背景颜色,它们会显示为灰色背景,如果我按下(或按住)某个项目,该背景会变暗:

enter image description here

我想将“突出显示”的颜色更改为其他颜色,例如绿色。我希望根据 onpressed 事件设置背景颜色对我有帮助,但是将 background: Rectangle { color: "green" } 添加到 SwipeDelegate 作为测试会完全消除较暗的“突出显示”。

有没有办法自定义高亮颜色?

解决方法

如果是supports palettes的样式,可以设置相关的调色板角色。对于默认样式(Qt 6 中的“基本”),它指定其背景颜色 like so:

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

因此,如果您使用该样式,则可以在委托上设置该属性:

palette.midlight: "green"

如果样式不支持调色板,您有几个选择:

  1. 为相关属性创建一个 Binding
  2. Component.onCompleted 中指定颜色。
  3. 编写您自己的background