Как выполнять прокрутку с помощью клавиш со стрелками на ScrollablePage киригами? - PullRequest
0 голосов
/ 11 июля 2020

Конвергентный UI-фреймворк для мобильных / настольных ПК на основе Qt Kirigami предоставляет тип QML ScrollablePage для поддержки прокрутки содержимого. Размещение в нем любого визуального элемента QML автоматически делает его прокручиваемым, если он больше, чем сама ScrollablePage:

ScrollablePage - это страница, содержащая прокручиваемый контент, например ListViews.

Прокрутка и прокрутка индикаторы будут автоматически управляться.

Kirigami.ScrollablePage {
    id: root
    //The rectangle will automatically be scrollable
    Rectangle {
        width: root.width
        height: 99999
    }
}

( источник )

Это обеспечивает полосы прокрутки и позволяет прокрутку колесиком мыши, прокрутку двумя пальцами тачпад и прокрутка («щелкни и брось»), как мы привыкли на устройствах с сенсорным экраном. . Как я могу сделать это возможным? Обычный подход выполнения Keys.onUpPressed: scrollBar.decrease() не работает, потому что полоса прокрутки ScrollablePage недоступна как часть его publi c API.

1 Ответ

0 голосов
/ 11 июля 2020

Инструкции

Используйте 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 с помощью клавиш со стрелками вверх и вниз. Это то, что обычно требуется для этих представлений, хотя это не прокрутка, а навигация с помощью клавиатуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...