Стиль ползунка: градиент по ширине канавки

Я пытаюсь создать собственный QML Slider стиль следующим образом:

SliderStyle {
    groove: Item {
        anchors.verticalCenter: parent.verticalCenter
        implicitWidth: 500
        implicitHeight: 10
        Rectangle {
            radius: height/2
            anchors.fill: parent
            border.width: 1
            border.color: "#888"
            gradient: Gradient {
                GradientStop { color: "#0A406E" ; position: 0 }
                GradientStop { color: "#FFA800" ; position: 1 }
            }
        }
    }
}

Тем не менее, градиент на канавке здесь идет от top в bottom скорее, чем left в right, Я пытался обменять width а также height значения и вращение Rectangle на -90 градусов, но тогда слайдер не реагировал. Кроме того, я никогда не мог сделать вращение вдоль центра ползунка, что делало размещение немного проблематичным.

Мне было интересно, есть ли способ добиться этого левого -> правого градиентного потока.

1 ответ

Решение

Rectangle собственность gradient позволяет строить простые вертикальные градиенты. Для более сложных градиентов есть LinearGradient, RadialGradient а также ConicalGradient типы.

Например, горизонтальный градиент:

import QtGraphicalEffects 1.0

SliderStyle {
    groove: Item {
        anchors.verticalCenter: parent.verticalCenter
        implicitWidth: 500
        implicitHeight: 10
        Rectangle {
            radius: height/2
            anchors.fill: parent
            border.width: 1
            border.color: "#888"
            layer.enabled: true
            layer.effect: LinearGradient {
                start: Qt.point(0, 0)
                end: Qt.point(500, 0)
                gradient: Gradient {
                    GradientStop { position: 0.0; color: "#0A406E" }
                    GradientStop { position: 1.0; color: "#FFA800" }
                }
            }
        }
    }
}
Другие вопросы по тегам