QWheelEvent Class

Die Klasse QWheelEvent enthält Parameter, die ein Rad-Ereignis beschreiben. Mehr...

Kopfzeile: #include <QWheelEvent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Vererbungen: QSinglePointEvent

Öffentliche Funktionen

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

Reimplementierte öffentliche Funktionen

virtual bool isBeginEvent() const override
virtual bool isEndEvent() const override
virtual bool isUpdateEvent() const override

Detaillierte Beschreibung

Rad-Ereignisse werden an das Widget unter dem Mauszeiger gesendet, aber wenn dieses Widget das Ereignis nicht behandelt, werden sie an das Fokus-Widget gesendet. Rad-Ereignisse werden sowohl für Mausräder als auch für Trackpad-Scrollgesten erzeugt. Es gibt zwei Möglichkeiten, das Rad-Ereignis-Delta zu lesen: angleDelta() gibt die Deltas in Rad-Grad zurück. Diese Werte werden immer bereitgestellt. pixelDelta() gibt die Deltas in Bildschirmpixeln zurück und ist auf Plattformen verfügbar, die hochauflösende Trackpads haben, wie macOS. Wenn dies der Fall ist, gibt device()->type() QInputDevice::DeviceType::Touchpad zurück.

Die Funktionen position() und globalPosition() geben die Position des Mauszeigers zum Zeitpunkt des Ereignisses zurück.

Ein Rad-Ereignis enthält ein spezielles Akzeptieren-Flag, das anzeigt, ob der Empfänger das Ereignis wünscht. Sie sollten ignore() aufrufen, wenn Sie das Rad-Ereignis nicht behandeln; dadurch wird sichergestellt, dass es an das übergeordnete Widget gesendet wird.

Die Funktion QWidget::setEnabled() kann verwendet werden, um Maus- und Tastaturereignisse für ein Widget zu aktivieren oder zu deaktivieren.

Der Event-Handler QWidget::wheelEvent() empfängt Rad-Ereignisse.

Siehe auch QMouseEvent und QWidget::grabMouse().

Dokumentation der Mitgliedsfunktionen

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())

Konstruiert ein Rad-Ereignis-Objekt.

Die pos gibt die Position des Mauszeigers im Fenster an. Die Position in globalen Koordinaten wird durch globalPos angegeben.

pixelDelta angleDelta enthält den Drehwinkel des Rades. pixelDelta ist optional und kann Null sein.

Die Maus- und Tastaturzustände zum Zeitpunkt des Ereignisses werden durch buttons und modifiers angegeben.

Die Bildlaufphase des Ereignisses wird durch phase angegeben, und source gibt an, ob es sich um ein echtes oder ein künstliches (synthetisiertes) Ereignis handelt.

Wenn das System so konfiguriert ist, dass die mit dem Ereignis gelieferten Delta-Werte invertiert werden (z. B. natürliches Scrollen des Touchpads unter macOS), sollte inverted für true stehen. Andernfalls ist inverted false

Das Gerät, von dem das Rad-Ereignis ausgeht, wird durch device angegeben.

Siehe auch position(), globalPosition(), angleDelta(), pixelDelta(), phase(), inverted(), und device().

QPoint QWheelEvent::angleDelta() const

Gibt den relativen Betrag, um den das Rad gedreht wurde, in Achtelgraden zurück. Ein positiver Wert bedeutet, dass das Rad vom Benutzer weg nach vorne gedreht wurde; ein negativer Wert bedeutet, dass das Rad zum Benutzer hin gedreht wurde. angleDelta().y() gibt den Winkel an, um den das gemeinsame vertikale Mausrad seit dem vorherigen Ereignis gedreht wurde. angleDelta().x() gibt den Winkel an, um den das horizontale Mausrad gedreht wurde, wenn die Maus über ein horizontales Rad verfügt; andernfalls bleibt er bei Null. Einige Mäuse erlauben es dem Benutzer, das Rad zu neigen, um einen horizontalen Bildlauf durchzuführen, und einige Touchpads unterstützen eine horizontale Bildlaufgeste; dies wird ebenfalls in angleDelta().x() angezeigt.

Die meisten Mäuse arbeiten in 15-Grad-Schritten, wobei der Deltawert ein Vielfaches von 120 ist, d. h. 120 Einheiten * 1/8 = 15 Grad.

Einige Mäuse haben jedoch feiner auflösende Räder und senden Deltawerte, die kleiner als 120 Einheiten (weniger als 15 Grad) sind. Um diese Möglichkeit zu unterstützen, können Sie entweder die Delta-Werte von Ereignissen kumulativ addieren, bis der Wert 120 erreicht ist, und dann das Widget scrollen, oder Sie können das Widget als Reaktion auf jedes Rad-Ereignis teilweise scrollen. Um jedoch ein nativeres Gefühl zu vermitteln, sollten Sie pixelDelta() auf Plattformen bevorzugen, auf denen es verfügbar ist.

Beispiel:

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();
}

Hinweis: Auf Plattformen, die das Scrollen phases unterstützen, kann das Delta Null sein, wenn:

  • der Bildlauf gerade beginnt, aber die Entfernung sich noch nicht geändert hat (Qt::ScrollBegin),
  • oder der Bildlauf beendet ist und sich der Abstand nicht mehr geändert hat (Qt::ScrollEnd).

Hinweis: Getter-Funktion für die Eigenschaft angleDelta.

Siehe auch pixelDelta().

bool QWheelEvent::inverted() const

Gibt zurück, ob die mit dem Ereignis gelieferten Deltawerte invertiert sind.

Normalerweise erzeugt ein vertikales Rad ein QWheelEvent mit positiven Deltawerten, wenn sich der obere Teil des Rads von der Hand, die es bedient, wegdreht. Analog dazu erzeugt eine horizontale Radbewegung eine QWheelEvent mit positiven Delta-Werten, wenn der obere Teil des Rads nach links bewegt wird.

Auf einigen Plattformen ist dies jedoch konfigurierbar, so dass dieselben oben beschriebenen Operationen negative Delta-Werte erzeugen (aber mit derselben Größenordnung). Mit der Eigenschaft "invertiert" kann ein Rad-Ereignisverbraucher festlegen, dass er unabhängig von den Systemeinstellungen immer der Richtung des Rades folgt, allerdings nur für bestimmte Widgets. (Ein solcher Anwendungsfall könnte sein, dass der Benutzer das Rad in die gleiche Richtung dreht, wie ein visueller Tumbler sich dreht. Ein anderer Anwendungsfall ist, dass ein Schieberegler unabhängig von der Systemkonfiguration der Bewegungsrichtung der Finger auf einem Touchpad folgen soll).

Hinweis: Viele Plattformen stellen keine solchen Informationen zur Verfügung. Auf solchen Plattformen gibt inverted immer false zurück.

Hinweis: Getter-Funktion für die Eigenschaft inverted.

[override virtual] bool QWheelEvent::isBeginEvent() const

Reimplements: QSinglePointEvent::isBeginEvent() const.

Gibt true zurück, wenn die phase() dieses Ereignisses Qt::ScrollBegin ist.

[override virtual] bool QWheelEvent::isEndEvent() const

Reimplements: QSinglePointEvent::isEndEvent() const.

Gibt true zurück, wenn die phase() dieses Ereignisses Qt::ScrollEnd ist.

[override virtual] bool QWheelEvent::isUpdateEvent() const

Reimplements: QSinglePointEvent::isUpdateEvent() const.

Gibt true zurück, wenn die phase() dieses Ereignisses Qt::ScrollUpdate oder Qt::ScrollMomentum ist.

Qt::ScrollPhase QWheelEvent::phase() const

Gibt die Bildlaufphase dieses Rad-Ereignisses zurück.

Hinweis: Die Phasen Qt::ScrollBegin und Qt::ScrollEnd werden derzeit nur unter macOS unterstützt.

Hinweis: Getter-Funktion für die Eigenschaft phase.

QPoint QWheelEvent::pixelDelta() const

Gibt den Bildlaufabstand in Pixeln auf dem Bildschirm zurück. Dieser Wert wird auf Plattformen bereitgestellt, die hochauflösende pixelbasierte Delta-Werte unterstützen, wie z. B. macOS. Der Wert sollte direkt zum Scrollen von Inhalten auf dem Bildschirm verwendet werden.

Beispiel:

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();
}

Hinweis: Auf Plattformen, die den Bildlauf phases unterstützen, kann der Delta-Wert null sein, wenn:

  • der Bildlauf gerade beginnt, aber der Abstand sich noch nicht geändert hat (Qt::ScrollBegin),
  • oder der Bildlauf beendet ist und sich der Abstand nicht mehr geändert hat (Qt::ScrollEnd).

Hinweis: Unter X11 ist dieser Wert treiberspezifisch und unzuverlässig, verwenden Sie stattdessen angleDelta().

Hinweis: Getter-Funktion für die Eigenschaft pixelDelta.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.