Класс QWheelEvent
Класс QWheelEvent содержит параметры, описывающие событие прокрутки колесика. Подробнее...
| Заголовок: | #include <QWheelEvent> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследует: | QSinglePointEvent |
Открытые функции
| QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized, const QPointingDevice *device = QPointingDevice::primaryPointingDevice()) | |
| QPoint | angleDelta() const |
| bool | inverted() const |
| Qt::ScrollPhase | phase() const |
| QPoint | pixelDelta() const |
Переопределённые открытые функции
| virtual bool | isBeginEvent() const override |
| virtual bool | isEndEvent() const override |
| virtual bool | isUpdateEvent() const override |
Подробное описание
События прокрутки колесика отправляются виджету под курсором мыши, но если этот виджет не обрабатывает событие, оно отправляется виджету с фокусом. События прокрутки генерируются как для колесика мыши, так и для жестов прокрутки трекпада. Есть два способа чтения дельты события прокрутки: angleDelta() возвращает дельту в градусах поворота. Эти значения всегда предоставляются. pixelDelta() возвращает дельту в пикселях экрана, и доступно на платформах с высокоразрешающими трекпадами, такими как macOS. Если это так, device()->type() вернёт QInputDevice::DeviceType::Touchpad.
Функции position() и globalPosition() возвращают положение курсора мыши во время события.
Событие прокрутки содержит специальный флаг подтверждения, который указывает, хочет ли получатель событие. Вы должны вызвать ignore(), если вы не обрабатываете событие прокрутки; это гарантирует, что оно будет отправлено родительскому виджету.
Функция QWidget::setEnabled() может использоваться для включения или выключения событий мыши и клавиатуры для виджета.
Обработчик событий QWidget::wheelEvent() получает события прокрутки.
См. также QMouseEvent и QWidget::grabMouse().
Документация по функциям-членам
[since 5.12] QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized, const QPointingDevice *device = QPointingDevice::primaryPointingDevice())
Конструирует объект события прокрутки.
pos указывает положение курсора мыши в окне. Положение в глобальных координатах задано параметром globalPos.
pixelDelta содержит расстояние прокрутки в пикселях на экране, а angleDelta содержит угол поворота колесика. pixelDelta является необязательным и может быть null.
Состояния мыши и клавиатуры на момент события заданы параметрами buttons и modifiers.
Фаза прокрутки события задана параметром phase, а source указывает, является ли это реальным или искусственным (синтезированным) событием.
Если система настроена на инвертирование значений дельты, передаваемых с событием (например, естественная прокрутка трекпада на macOS), inverted должно быть true. В противном случае, inverted false
Устройство, с которого исходит событие прокрутки, задано параметром device.
Эта функция была введена в Qt 5.12.
См. также position(), globalPosition(), angleDelta(), pixelDelta(), phase(), inverted(), и device().
QPoint QWheelEvent::angleDelta() const
Возвращает относительное значение поворота колесика в восьмых долях градуса. Положительное значение указывает, что колесико поворачивалось вперёд от пользователя; отрицательное значение указывает, что колесико поворачивалось назад к пользователю. angleDelta().y() содержит угол, на который повернулось стандартное вертикальное колесико мыши с момента предыдущего события. angleDelta().x() содержит угол, на который повернулось горизонтальное колесико мыши, если оно есть; в противном случае остаётся нулевым. Некоторые мыши позволяют пользователю наклонять колесико для горизонтальной прокрутки, и некоторые трекпады поддерживают горизонтальный жест прокрутки; это также отобразится в angleDelta().x().
Большинство типов мышей работают с шагом в 15 градусов, в этом случае значение дельты является кратным 120; т. е. 120 единиц * 1/8 = 15 градусов.
Однако у некоторых мышей есть колесики с более высоким разрешением и они отправляют значения дельты, которые меньше 120 единиц (меньше 15 градусов). Для поддержки этой возможности вы можете либо суммировать значения дельты из событий до достижения значения 120, а затем прокрутить виджет, либо частично прокручивать виджет в ответ на каждое событие прокрутки. Но для более естественного ощущения вы должны отдавать предпочтение pixelDelta() на платформах, где оно доступно.
Пример:
void MyWidget::wheelEvent(QWheelEvent *event)
{
QPoint numPixels = event->pixelDelta();
QPoint numDegrees = event->angleDelta() / 8;
if (!numPixels.isNull()) {
scrollWithPixels(numPixels);
} else if (!numDegrees.isNull()) {
QPoint numSteps = numDegrees / 15;
scrollWithDegrees(numSteps);
}
event->accept();
} Примечание: На платформах, которые поддерживают фазы прокрутки phase(), дельта может быть пустой, когда:
- начало прокрутки, но расстояние ещё не изменилось (Qt::ScrollBegin),
- или прокрутка закончилась, и расстояние больше не изменилось (Qt::ScrollEnd).
Примечание: Функция-геттер для свойства angleDelta.
См. также pixelDelta().
[since 5.7] bool QWheelEvent::inverted() const
Возвращает, инвертированы ли значения дельты, предоставленные с событием.
Обычно, вертикальное колесико мыши создаёт QWheelEvent с положительными значениями дельты, если верхняя часть колесика вращается от оператора. Аналогично, горизонтальное движение колесика мыши создаёт QWheelEvent с положительными значениями дельты, если верхняя часть колесика перемещается влево.
Однако на некоторых платформах это настраивается, так что те же операции, описанные выше, дадут отрицательные значения дельты (но с тем же модулем). С свойством inverted потребитель событий прокрутки может выбрать всегда следовать направлению колесика, независимо от настроек системы, но только для определённых виджетов. (Один из таких вариантов использования - это то, что пользователь вращает колесико в том же направлении, что и визуальный ползунок. Другой вариант использования - заставить ползунок слайдера следовать направлению движения пальцев на трекпаде независимо от конфигурации системы.)
Примечание: Многие платформы не предоставляют такой информации. На таких платформах inverted всегда возвращает false.
Примечание: Функция-геттер для свойства inverted.
Эта функция была введена в Qt 5.7.
[override virtual] bool QWheelEvent::isBeginEvent() const
Переопределяет: QSinglePointEvent::isBeginEvent() const.
Возвращает true если фаза (phase()) этого события равна Qt::ScrollBegin.
[override virtual] bool QWheelEvent::isEndEvent() const
Переопределяет: QSinglePointEvent::isEndEvent() const.
Возвращает true если фаза (phase()) этого события равна Qt::ScrollEnd.
[override virtual] bool QWheelEvent::isUpdateEvent() const
Переопределяет: QSinglePointEvent::isUpdateEvent() const.
Возвращает true если фаза (phase()) этого события равна Qt::ScrollUpdate или Qt::ScrollMomentum.
[since 5.2] Qt::ScrollPhase QWheelEvent::phase() const
Возвращает фазу прокрутки этого события колесика.
Примечание: Фазы Qt::ScrollBegin и Qt::ScrollEnd в настоящее время поддерживаются только на macOS.
Примечание: Функция-геттер для свойства phase.
Эта функция была добавлена в Qt 5.2.
QPoint QWheelEvent::pixelDelta() const
Возвращает расстояние прокрутки в пикселях на экране. Это значение предоставляется на платформах, поддерживающих высококачественные значения дельты на основе пикселей, таких как macOS. Значение должно использоваться непосредственно для прокрутки содержимого на экране.
Пример:
void MyWidget::wheelEvent(QWheelEvent *event)
{
QPoint numPixels = event->pixelDelta();
QPoint numDegrees = event->angleDelta() / 8;
if (!numPixels.isNull()) {
scrollWithPixels(numPixels);
} else if (!numDegrees.isNull()) {
QPoint numSteps = numDegrees / 15;
scrollWithDegrees(numSteps);
}
event->accept();
} Примечание: На платформах, которые поддерживают фазы прокрутки phase, дельта может быть нулевой, когда:
- начинается прокрутка, но расстояние еще не изменилось (Qt::ScrollBegin),
- или прокрутка завершена, и расстояние больше не изменилось (Qt::ScrollEnd).
Примечание: В X11 это значение зависит от драйвера и ненадежно, используйте angleDelta() вместо него.
Примечание: Функция-геттер для свойства pixelDelta.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qwheelevent.html