Дескриптор ползунка из центра QML

#qt #qml #qtquickcontrols

#qt #qml #qtquickcontrols

Вопрос:

В ползунке в qml слайд начинается с самого начала. Есть ли какой-либо способ, которым мы могли бы указать, как заставить его начинаться с центра. Например, при перетаскивании влево он должен отображать цвет. точно так же, как наличие отрицательного ползунка

Я попробовал что-то подобное, но для меня это (оранжевый прогресс) должно начинаться с центра и распространяться влево и вправо от центра, как балансир.

 import QtQuick 2.0
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Item {
    Slider {
        anchors.centerIn: parent
        value: 0.5
        width: 400
        style: SliderStyle {
            groove: Rectangle {
                implicitHeight: 2
                color: "lightgrey"
                radius: 3

                Rectangle {
                    implicitHeight: 2
                    color: "orange"
                    radius: 3
                    implicitWidth: control.value * parent.width

                }
            }             
        }
    }
}
  

Комментарии:

1. Для QtQuick. Элементы управления 1 у вас есть minimumValue и maximumValue . В QtQuick. Элементы управления 2 у вас есть from и to . Дело в цвете, я так и не понял.

2. @Derm Для меня это (оранжевый прогресс) должно начинаться с центра и распространяться влево и вправо от центра, как балансир

Ответ №1:

Итак, вы ищете что-то подобное?

 Slider {
    id: slide
    anchors.centerIn: parent
    minimumValue: -1
    maximumValue: 1
    value: 0.0
    width: 400
    style: SliderStyle {
        groove: Rectangle {
            implicitHeight: 2
            color: "lightgrey"
            radius: 3

            Rectangle {
                anchors {
                    left: (control.value > 0 ? parent.horizontalCenter : undefined)
                    right: (control.value <= 0 ? parent.horizontalCenter : undefined)
                }

                implicitHeight: 2
                color: "orange"
                radius: 3
                width: Math.abs(control.value) * parent.width / 2

            }
        }
    }
}
  

Для неотрицательных значений это должно быть довольно легко адаптировать. Просто установите якоря / поля правильно, когда он превысит ваш порог.
Ширина вычисляется путем вычисления процента от значения для этого сегмента, умноженного на длину сегмента (в пикселях)…

Комментарии:

1. точно… Это то, что я пытался сделать