Перетаскивание диапазона RangeSlider - PullRequest
0 голосов
/ 11 декабря 2018

В моем проекте Qt для просмотра лог-файлов с диаграммами мне нужен ползунок диапазона для простой навигации по оси времени.

Мне нужна поддержка перетаскивания обеих ручек;при нажатии и перемещении между ручками обе ручки перемещаются вместе.Поведение RangeSlider заключается в том, чтобы расположить ближайший дескриптор в позиции, на которую нажали, и я не могу найти способ изменить это из каких-либо свойств.

Когда предоставленные элементы управления не предоставляют требуемыеИнтересно, единственный ли способ - создать новый компонент с нуля, или есть ли способ настроить существующие элементы управления?

1 Ответ

0 голосов
/ 11 декабря 2018

То, что вы хотите, безусловно, возможно:

RangeSlider {
    id: sli
    width: 300
    from: 0
    to: 1000
    first.value: 300
    second.value: 700
    Rectangle {
      anchors.left: sli.first.handle.right
      anchors.right: sli.second.handle.left
      anchors.verticalCenter: sli.verticalCenter
      height: sli.first.handle.height
      color: "red"
      MouseArea {
        anchors.fill: parent
        property real dx: 0
        onPressed: dx = mouseX
        onPositionChanged: {
          var d = ((mouseX - dx) / sli.width) * Math.abs(sli.to - sli.from)
          if ((d + sli.first.value) < sli.from) d = sli.from - sli.first.value
          if ((d + sli.second.value) > sli.to) d = sli.to - sli.second.value
          sli.first.value += d
          sli.second.value += d
          dx = mouseX
        }
      }
    }
  }

Красный прямоугольник на самом деле избыточен, я просто положил его туда в качестве наглядного пособия.

...