Класс QScroller
Класс QScroller обеспечивает кинетическое прокручивание для любого виджета прокрутки или графического элемента. Подробнее...
| Заголовок: | #include <QScroller> |
| qmake: | QT += widgets |
| С момента: | Qt 5.0 |
| Наследует: | QObject |
Этот класс был представлен в Qt 5.0.
Типы публичного доступа
| Перечисление | Input { InputPress, InputMove, InputRelease } |
| Перечисление | ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture } |
| Перечисление | State { Inactive, Pressed, Dragging, Scrolling } |
Свойства
- scrollerProperties : QScrollerProperties
- state : const State
Функции публичного доступа
| QPointF | finalPosition() const |
| bool | handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0) |
| QPointF | pixelPerMeter() const |
| QScrollerProperties | scrollerProperties() const |
| void | setSnapPositionsX(const QList<qreal> &positions) |
| void | setSnapPositionsX(qreal first, qreal interval) |
| void | setSnapPositionsY(const QList<qreal> &positions) |
| void | setSnapPositionsY(qreal first, qreal interval) |
| QScroller::State | state() const |
| void | stop() |
| QObject * | target() const |
| QPointF | velocity() const |
Свойства публичного доступа
| void | ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime) |
| void | ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin) |
| void | resendPrepareEvent() |
| void | scrollTo(const QPointF &pos, int scrollTime) |
| void | scrollTo(const QPointF &pos) |
| void | setScrollerProperties(const QScrollerProperties &prop) |
Сигналы
| void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
| void | stateChanged(QScroller::State newState) |
Статические члены публичного доступа
| QList<QScroller *> | activeScrollers() |
| Qt::GestureType | grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture) |
| Qt::GestureType | grabbedGesture(QObject *target) |
| bool | hasScroller(QObject *target) |
| QScroller * | scroller(QObject *target) |
| const QScroller * | scroller(const QObject *target) |
| void | ungrabGesture(QObject *target) |
Подробное описание
Кинетическая прокрутка позволяет пользователю толкнуть виджет в заданном направлении, и он будет продолжать прокручивать в этом направлении до тех пор, пока он не будет остановлен либо пользователем, либо трением. Аспекты инерции, трения и других физических понятий можно изменить, чтобы точно настроить интуитивно понятный пользовательский опыт.
Объект QScroller — это объект, который хранит текущую позицию и скорость прокрутки и отвечает за обновления. QScroller может быть вызван жестом фликом
QWidget *w = ...;
QScroller::grabGesture(w, QScroller::LeftMouseButtonGesture); или напрямую, как это:
QWidget *w = ...;
QScroller *scroller = QScroller::scroller(w);
scroller->scrollTo(QPointF(100, 100)); Прокручиваемые QObjects получают QScrollPrepareEvent всякий раз, когда прокручиватель нуждается в обновлении информации о своей геометрии, и QScrollEvent всякий раз, когда содержимое объекта фактически должно быть прокручено.
Прокручиватель использует глобальный таймер QAbstractAnimation, чтобы генерировать свои QScrollEvents. Это можно изменить с помощью QScrollerProperties::FrameRate на основе каждого QScroller.
Несколько примеров в каталоге scroller показывают, как можно использовать QScroller, QScrollEvent и жест прокрутки.
Несмотря на то, что у этого кинетического прокручивателя доступно большое количество настроек через QScrollerProperties, мы рекомендуем оставлять их все в их значениях по умолчанию, оптимизированных для платформы. Перед их изменением вы можете поэкспериментировать с примером plot в каталоге scroller примеров.
См. также QScrollEvent, QScrollPrepareEvent и QScrollerProperties.
Документация по типу членов
перечисление QScroller::Input
Это перечисление содержит устройство-независимый вид событий ввода, которые релевантны для QScroller.
| Постоянная | Значение | Описание |
|---|---|---|
QScroller::InputPress |
1 |
Пользователь нажал на устройство ввода (например, QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin) |
QScroller::InputMove |
2 |
Пользователь переместил устройство ввода (например, QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate) |
QScroller::InputRelease |
3 |
Пользователь отпустил устройство ввода (например, QEvent::MouseButtonRelease, QEvent::GraphicsSceneMouseRelease, QEvent::TouchEnd) |
перечисление QScroller::ScrollerGestureType
Это перечисление содержит различные типы жестов, которые поддерживаются распознавателем жестов QScroller.
| Константа | Значение | Описание |
|---|---|---|
QScroller::TouchGesture |
0 |
Распознаватель жестов будет срабатывать только при событиях касания. В частности, он будет реагировать на одиночные точки касания при использовании сенсорного экрана и на две точки касания при использовании тачпада. |
QScroller::LeftMouseButtonGesture |
1 |
Распознаватель жестов будет срабатывать только при событиях нажатия левой кнопки мыши. |
QScroller::MiddleMouseButtonGesture |
3 |
Распознаватель жестов будет срабатывать только при событиях нажатия средней кнопки мыши. |
QScroller::RightMouseButtonGesture |
2 |
Распознаватель жестов будет срабатывать только при событиях нажатия правой кнопки мыши. |
enum QScroller::State
Этот перечисление содержит различные состояния QScroller.
| Константа | Значение | Описание |
|---|---|---|
QScroller::Inactive |
0 |
Прокрутка не выполняется, и ничего не нажато. |
QScroller::Pressed |
1 |
Было получено событие касания или нажатия кнопки мыши, но область прокрутки в данный момент не перемещается. |
QScroller::Dragging |
2 |
Область прокрутки в данный момент следует за точкой касания или курсором мыши. |
QScroller::Scrolling |
3 |
Область прокрутки перемещается самостоятельно. |
Документация по свойствам
scrollerProperties : QScrollerProperties
Это свойство содержит свойства прокрутки этой прокрутки. Свойства используются QScroller для определения поведения прокрутки.
Функции доступа:
| QScrollerProperties | scrollerProperties() const |
| void | setScrollerProperties(const QScrollerProperties &prop) |
Сигнал уведомления:
| void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
state : const State
Это свойство содержит состояние прокрутки.
Функции доступа:
| QScroller::State | state() const |
Сигнал уведомления:
| void | stateChanged(QScroller::State newState) |
См. также QScroller::State.
Документация по функциям-членам
[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
Это перегруженная функция.
Эта версия достигнет своей целевой позиции за scrollTime миллисекунд.
[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
Начинает прокрутку таким образом, чтобы прямоугольник rect был виден внутри области просмотра с дополнительными отступами, указанными в пикселях xmargin и ymargin вокруг прямоугольника.
В случаях, когда невозможно разместить прямоугольник плюс отступы внутри области просмотра, содержимое прокручивается так, чтобы как можно больше из rect было видно.
Скорость прокрутки рассчитывается таким образом, чтобы заданная позиция была достигнута после времени, определяемого платформой.
Эта функция выполняет фактическую прокрутку, вызывая scrollTo().
См. также scrollTo().
[slot] void QScroller::resendPrepareEvent()
Эта функция повторно отправляет QScrollPrepareEvent. Вызов resendPrepareEvent вызывает QScrollPrepareEvent из объекта прокрутки. Это позволяет получателю повторно установить позицию и размер содержимого во время прокрутки. Вызов этой функции в состоянии Inactive бесполезен, так как событие prepare отправляется снова перед началом прокрутки.
[slot] void QScroller::scrollTo(const QPointF &pos, int scrollTime)
Это перегруженная функция.
Эта версия достигнет своей целевой позиции за scrollTime миллисекунд.
[slot] void QScroller::scrollTo(const QPointF &pos)
Начинает прокрутку виджета так, чтобы точка pos была в верхнем левом углу области просмотра.
Поведение при прокрутке за пределами допустимой области прокрутки не определено. В этом случае прокрутка может или не может перескочить.
Скорость прокрутки рассчитывается таким образом, чтобы заданная позиция была достигнута после времени, определяемого платформой.
pos задается в координатах области просмотра.
См. также ensureVisible().
[signal] void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)
QScroller излучает этот сигнал всякий раз, когда меняются его свойства прокрутки. newProperties — новые свойства прокрутки.
Примечание: Сигнал уведомления для свойства scrollerProperties.
См. также scrollerProperties.
[signal] void QScroller::stateChanged(QScroller::State newState)
QScroller излучает этот сигнал всякий раз, когда состояние изменяется. newState — новое состояние.
Примечание: Сигнал уведомления для свойства state.
См. также state.
[static] QList<QScroller *> QScroller::activeScrollers()
Возвращает список всех активных объектов QScroller во всем приложении. Активные объекты QScroller находятся в состоянии state(), которое не равно QScroller::Inactive. Эта функция полезна при написании собственного распознавателя жестов.
QPointF QScroller::finalPosition() const
Возвращает прогнозируемую конечную позицию для текущего движения прокрутки. Возвращает текущую позицию, если состояние прокрутки не равно Scrolling. Результат не определен, если состояние прокрутки равно Inactive.
Целевая позиция в пикселях.
См. также pixelPerMeter() и scrollTo().
[static] Qt::GestureType QScroller::grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)
Регистрирует пользовательский распознаватель жестов прокрутки, захватывает его для target и возвращает тип полученного жеста. Если scrollGestureType задан как TouchGesture, жест срабатывает при событиях касания. Если он задан как LeftMouseButtonGesture, RightMouseButtonGesture или MiddleMouseButtonGesture, он срабатывает при событиях нажатия соответствующей кнопки мыши.
Только один жест прокрутки может быть активным для одного объекта в одно и то же время. Если вы дважды вызываете эту функцию для одного и того же объекта, предыдущий жест будет отпущен, а новый — захвачен.
Примечание: Чтобы избежать нежелательных побочных эффектов, события мыши потребляются во время срабатывания жеста. Так как начальное событие нажатия мыши не потребляется, жест отправляет фальшивое событие отпускания мыши в глобальной позиции (INT_MIN, INT_MIN). Это гарантирует, что внутренние состояния виджета, получившего исходное нажатие мыши, будут согласованы.
См. также ungrabGesture() и grabbedGesture().
[static] Qt::GestureType QScroller::grabbedGesture(QObject *target)
Возвращает тип жеста, в данный момент захваченного для target, или 0, если ни один жест не захвачен.
См. также grabGesture() и ungrabGesture().
bool QScroller::handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)
Эта функция используется распознавателями жестов для информирования прокручивателя о новом событии ввода. Прокручиватель изменяет своё внутреннее состояние state() в соответствии с событием ввода и связанными с ним свойствами прокручивателя. Прокручиватель не различает тип устройства ввода, от которого произошло событие. Поэтому событие должно быть разделено на тип input, позицию position и временную метку timestamp в миллисекундах. Позиция position должна быть указана в системе координат целевого объекта.
Возвращаемое значение — true, если событие должно быть обработано вызывающим фильтром, или false, если событие должно быть передано контролю.
Примечание: Для большинства случаев достаточно использовать grabGesture().
[static] bool QScroller::hasScroller(QObject *target)
Возвращает true, если для target уже был создан объект QScroller; false в противном случае.
См. также scroller().
QPointF QScroller::pixelPerMeter() const
Возвращает значение пикселей на метр для прокручиваемого виджета.
Значение возвращается для каждой оси (x и y) отдельно, используя QPointF.
Примечание: Обратите внимание, что это значение должно быть физически корректным. Фактические настройки DPI, возвращаемые Qt для дисплея, могут быть неправильно отображены операционной системой, например, на macOS.
[static] QScroller *QScroller::scroller(QObject *target)
Возвращает прокручиватель для данного target. Пока объект существует, эта функция всегда будет возвращать тот же экземпляр QScroller. Если для target нет объекта QScroller, он будет неявно создан. В любой момент времени на объекте может быть активен только один объект QScroller.
См. также hasScroller() и target().
[static] const QScroller *QScroller::scroller(const QObject *target)
Это перегруженная функция.
Это версия функции scroller() с модификатором const.
void QScroller::setSnapPositionsX(const QList<qreal> &positions)
Устанавливает позиции привязки для горизонтальной оси в список positions. Это переписывает все ранее установленные позиции привязки, а также предыдущий интервал привязки. Привязка может быть отключена, установив пустой список позиций.
void QScroller::setSnapPositionsX(qreal first, qreal interval)
Устанавливает позиции привязки для горизонтальной оси с равномерно распределёнными интервалами. Первая позиция привязки — first. Следующая — first + interval. Это может быть использовано для реализации заголовка списка. Это переписывает все ранее установленные позиции привязки, а также предыдущий интервал привязки. Привязка может быть отключена, установив интервал 0.0
void QScroller::setSnapPositionsY(const QList<qreal> &positions)
Устанавливает позиции привязки для вертикальной оси в список positions. Это переписывает все ранее установленные позиции привязки, а также предыдущий интервал привязки. Привязка может быть отключена, установив пустой список позиций.
void QScroller::setSnapPositionsY(qreal first, qreal interval)
Устанавливает позиции привязки для вертикальной оси с равномерно распределёнными интервалами. Первая позиция привязки — first. Следующая — first + interval. Это переписывает все ранее установленные позиции привязки, а также предыдущий интервал привязки. Привязка может быть отключена, установив интервал 0.0
void QScroller::stop()
Останавливает прокручиватель и возвращает его состояние в Неактивно.
QObject *QScroller::target() const
Возвращает целевой объект этого прокручивателя.
См. также hasScroller() и scroller().
[static] void QScroller::ungrabGesture(QObject *target)
Отпускает захват жеста для target. Ничего не делает, если жесть не захвачена.
См. также grabGesture() и grabbedGesture().
QPointF QScroller::velocity() const
Возвращает текущую скорость прокрутки в метрах в секунду, когда состояние — Прокрутка или Перетаскивание. Возвращает нулевую скорость в других случаях.
Скорость возвращается для каждой оси (x и y) отдельно, используя QPointF.
См. также pixelPerMeter().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qscroller.html