Spec-Zone.ru › Qt

Класс 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API