Класс QScroller
Класс QScroller позволяет реализовать кинетическое прокручивание для любых виджетов прокрутки или графических элементов. Подробнее...
| Заголовок: | #include <QScroller> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| С момента: | Qt 5.0 |
| Наследует: | QObject |
Типы публичного доступа
| Перечисление | 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 всякий раз, когда scroller нужно обновить информацию о геометрии, и событие QScrollEvent всякий раз, когда содержимое объекта должно быть фактически прокручено.
Scroller использует глобальный таймер QAbstractAnimation, чтобы генерировать свои QScrollEvents. Это можно изменить с помощью QScrollerProperties::FrameRate для каждого QScroller.
Пример Dir View демонстрирует способ использования QScroller с QTreeView. Пример в каталоге scroller примеров также демонстрирует QScroller.
Хотя у этого кинетического скроллера доступно много настроек через 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.
Документация по членам-функциям
void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
Это перегруженная функция.
Эта версия достигнет своей конечной позиции за scrollTime миллисекунд.
void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
Начинает прокрутку так, чтобы прямоугольник rect был виден внутри области просмотра с дополнительными отступами, указанными в пикселях параметрами xmargin и ymargin вокруг прямоугольника.
В случаях, когда невозможно разместить прямоугольник вместе с отступами внутри области просмотра, содержимое прокручивается так, чтобы как можно больше из rect было видно.
Скорость прокрутки рассчитывается таким образом, чтобы заданная позиция была достигнута через определённый платформой промежуток времени.
Эта функция выполняет фактическую прокрутку, вызывая scrollTo().
См. также scrollTo().
void QScroller::resendPrepareEvent()
Эта функция повторно отправляет QScrollPrepareEvent. Вызов resendPrepareEvent запускает QScrollPrepareEvent из скроллера. Это позволяет получателю повторно установить положение содержимого и размер содержимого во время прокрутки. Вызов этой функции в состоянии Inactive бесполезен, так как событие prepare отправляется снова перед началом прокрутки.
void QScroller::scrollTo(const QPointF &pos, int scrollTime)
Это перегруженная функция.
Эта версия достигнет своей конечной позиции за scrollTime миллисекунд.
void QScroller::scrollTo(const QPointF &pos)
Начинает прокрутку виджета так, чтобы точка pos находилась в верхнем левом углу области просмотра.
Поведение при прокрутке за пределами допустимой области прокрутки не определено. В этом случае скроллер может или не может перескочить.
Скорость прокрутки будет рассчитана так, чтобы заданная позиция была достигнута через определённый платформой промежуток времени.
pos задаётся в координатах области просмотра.
См. также ensureVisible().
void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)
QScroller излучает этот сигнал всякий раз, когда меняются его свойства скроллера. newProperties — новые свойства скроллера.
Примечание: Сигнал уведомления для свойства scrollerProperties.
См. также scrollerProperties.
void QScroller::stateChanged(QScroller::State newState)
QScroller излучает этот сигнал всякий раз, когда состояние изменяется. newState — новое состояние.
Примечание: Сигнал уведомления для свойства state.
См. также state.
QList<QScroller *> QScroller::activeScrollers()
Возвращает список всех активных объектов QScroller во всём приложении. Активные объекты QScroller находятся в состоянии state(), которое не равно QScroller::Inactive. Эта функция полезна при написании собственного распознавателя жестов.
QPointF QScroller::finalPosition() const
Возвращает прогнозируемую конечную позицию для текущего движения прокрутки. Возвращает текущую позицию, если состояние скроллера не равно Scrolling. Результат неопределён, если состояние скроллера равно Inactive.
Целевая позиция в пикселях.
См. также pixelPerMeter() и scrollTo().
Qt::GestureType QScroller::grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)
Регистрирует пользовательский распознаватель жестов прокрутки, захватывает его для target и возвращает тип полученного жеста. Если scrollGestureType установлен в TouchGesture, то жест срабатывает на события касания. Если он установлен в одно из значений LeftMouseButtonGesture, RightMouseButtonGesture или MiddleMouseButtonGesture, то он срабатывает на события мыши соответствующей кнопки.
Только один жест прокрутки может быть активен на одном объекте одновременно. Если вы вызываете эту функцию дважды на одном объекте, он разблокирует существующий жест перед захватом нового.
Примечание: Чтобы избежать нежелательных побочных эффектов, события мыши потребляются во время срабатывания жеста. Так как исходное событие нажатия мыши не потребляется, жест отправляет ложное событие отпускания мыши в глобальной позиции (INT_MIN, INT_MIN). Это гарантирует, что внутренние состояния виджета, получившего исходное событие нажатия мыши, будут согласованны.
См. также ungrabGesture() и grabbedGesture().
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-6.2/qscroller.html