Стиль ползунка: градиент по ширине канавки
Я пытаюсь создать собственный 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" }
}
}
}
}
}