Инструкции
Используйте Flickable
, чтобы обернуть элементы содержимого, которые вы помещаете в свой ScrollablePage
. Затем оцените события нажатия клавиш в Flickable
и в ответ выполните flick()
, чтобы прокрутить представление. Пример (объединение примеров из руководства по Киригами и из руководства Qt ):
Kirigami.ScrollablePage {
id: root
Flickable {
focus: true
topMargin: 20; leftMargin: 20; bottomMargin: 20; rightMargin: 20
Keys.onUpPressed: flick(0, 800)
Keys.onDownPressed: flick(0, -800)
Rectangle {
width: root.width
height: 5000
}
}
}
Подробности и пояснения
Пока вы не можете доступ к полосе прокрутки, вы можете получить доступ к тому, что использует полоса прокрутки для перемещения представления: экземпляр Flickable
. Вам просто нужно обернуть его вокруг содержимого страницы. Если вы этого не сделаете, ScrollablePage внутренне использует ScrollView, чтобы обернуть содержимое вашей страницы в Flickable в любом случае, но тогда у вас нет ссылки на него для выполнения flick()
.
Выполнение flick()
делает то же самое, что и когда пользователь щелкает элемент, поэтому положение полосы прокрутки et c. будет обновлено нормально.
Если это все еще не работает, то (1) возможно, вы задали слишком маленькие значения пикселей в секунду для Flickable::flick()
, чтобы прокрутка была видна, или (2) возможно, начальные значения Flickable::flickDeceleration
на вашей платформе испорчены. Эти значения специфичны для платформы c, поэтому могут потребоваться некоторые эксперименты. На некоторых платформах установка их на ноль во время flick()
поможет , в то время как при Linux это именно то значение, которое предотвращает любое движение прокрутки.
Нет необходимости включать ScrollablePage::keyboardNavigationEnabled
, чтобы вышеуказанное решение работало, поскольку оно предназначено только для перемещения currentItem
подходящего содержимого с помощью клавиш со стрелками (см. Ниже), а не для прокрутки в целом. Это даже предотвратит обычную прокрутку, если содержимое вашей страницы представляет собой представление элемента (ListView
, GridView
et c.).
Альтернативное решение для представлений элементов
Если содержимое вашего ScrollablePage - это представление элемента (любой объект QML, имеющий свойство currentItem
, например ListView
или GridView
), тогда вместо того, чтобы оборачивать это содержимое в Flickable
, просто включите ScrollablePage::keyboardNavigationEnabled
. Это позволит вам перемещать currentItem
с помощью клавиш со стрелками вверх и вниз. Это то, что обычно требуется для этих представлений, хотя это не прокрутка, а навигация с помощью клавиатуры.