QScroller Class

Die Klasse QScroller ermöglicht kinetisches Scrollen für jedes scrollende Widget oder Grafikelement. Mehr...

Kopfzeile: #include <QScroller>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Vererbungen: QObject

Öffentliche Typen

enum Input { InputPress, InputMove, InputRelease }
enum ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture }
enum State { Inactive, Pressed, Dragging, Scrolling }

Eigenschaften

Öffentliche Funktionen

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

Öffentliche Slots

void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
void resendPrepareEvent()
void scrollTo(const QPointF &pos)
void scrollTo(const QPointF &pos, int scrollTime)
void setScrollerProperties(const QScrollerProperties &prop)

Signale

void scrollerPropertiesChanged(const QScrollerProperties &newProperties)
void stateChanged(QScroller::State newState)

Statische öffentliche Mitglieder

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)

Detaillierte Beschreibung

Beim kinetischen Scrollen kann der Benutzer das Widget in eine bestimmte Richtung schieben und es scrollt so lange in diese Richtung, bis es entweder vom Benutzer oder durch Reibung gestoppt wird. Aspekte der Trägheit, Reibung und andere physikalische Konzepte können verändert werden, um eine intuitive Benutzererfahrung zu ermöglichen.

Das QScroller-Objekt ist das Objekt, das die aktuelle Position und Scrollgeschwindigkeit speichert und für die Aktualisierung sorgt. QScroller kann durch eine Schnipp-Geste ausgelöst werden

    QWidget *w = ...;
    QScroller::grabGesture(w, QScroller::LeftMouseButtonGesture);

oder direkt wie hier:

    QWidget *w = ...;
    QScroller *scroller = QScroller::scroller(w);
    scroller->scrollTo(QPointF(100, 100));

Die gescrollten QObjects erhalten eine QScrollPrepareEvent, wenn der Scroller seine Geometrieinformationen aktualisieren muss, und eine QScrollEvent, wenn der Inhalt des Objekts tatsächlich gescrollt werden soll.

Der Scroller verwendet den globalen QAbstractAnimation Timer, um seine QScrollEvents zu erzeugen. Dieser kann mit QScrollerProperties::FrameRate auf einer pro-QScroller-Basis geändert werden.

Obwohl dieser kinetische Scroller über eine große Anzahl von Einstellungen verfügt, die über QScrollerProperties verfügbar sind, empfehlen wir, dass Sie alle auf ihren standardmäßigen, plattformoptimierten Werten belassen. Bevor Sie sie ändern, können Sie mit dem plot Beispiel im scroller Beispielverzeichnis experimentieren.

Siehe auch QScrollEvent, QScrollPrepareEvent, und QScrollerProperties.

Dokumentation der Mitgliedstypen

enum QScroller::Input

Diese Aufzählung enthält eine geräteunabhängige Ansicht der Eingabeereignisse, die für QScroller relevant sind.

KonstanteWertBeschreibung
QScroller::InputPress1Der Benutzer hat das Eingabegerät gedrückt (z.B. QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin)
QScroller::InputMove2Der Benutzer hat das Eingabegerät bewegt (z. B. QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate)
QScroller::InputRelease3Der Benutzer hat das Eingabegerät losgelassen (z. B. QEvent::MouseButtonRelease, QEvent::GraphicsSceneMouseRelease, QEvent::TouchEnd)

enum QScroller::ScrollerGestureType

Diese Aufzählung enthält die verschiedenen Gestenarten, die vom QScroller Gestenerkenner unterstützt werden.

KonstanteWertBeschreibung
QScroller::TouchGesture0Die Gestenerkennung wird nur bei Berührungsereignissen ausgelöst. Insbesondere reagiert er auf einzelne Berührungspunkte bei Verwendung eines Touchscreens und auf zwei Berührungspunkte bei Verwendung eines Touchpads.
QScroller::LeftMouseButtonGesture1Die Gestenerkennung wird nur auf Ereignisse der linken Maustaste ausgelöst.
QScroller::MiddleMouseButtonGesture3Die Gestenerkennung wird nur bei Ereignissen der mittleren Maustaste ausgelöst.
QScroller::RightMouseButtonGesture2Die Gestenerkennung wird nur bei Ereignissen der rechten Maustaste ausgelöst.

enum QScroller::State

Diese Aufzählung enthält die verschiedenen Zustände von QScroller.

KonstanteWertBeschreibung
QScroller::Inactive0Der Scroller scrollt nicht und es wird nichts gedrückt.
QScroller::Pressed1Ein Berührungsereignis wurde empfangen oder die Maustaste wurde gedrückt, aber der Bildlaufbereich wird derzeit nicht gezogen.
QScroller::Dragging2Der Bildlaufbereich folgt derzeit dem Berührungspunkt oder der Maus.
QScroller::Scrolling3Der Bildlaufbereich bewegt sich von selbst.

Dokumentation der Eigenschaft

scrollerProperties : QScrollerProperties

Diese Eigenschaft enthält die Bildlaufeigenschaften dieser Bildlaufleiste. Die Eigenschaften werden von QScroller verwendet, um das Verhalten des Scrollers zu bestimmen.

Zugriffsfunktionen:

QScrollerProperties scrollerProperties() const
void setScrollerProperties(const QScrollerProperties &prop)

Benachrichtigungssignal:

void scrollerPropertiesChanged(const QScrollerProperties &newProperties)

[read-only] state : const State

Diese Eigenschaft enthält den Status des Scrollers

Zugriffsfunktionen:

QScroller::State state() const

Benachrichtigungssignal:

void stateChanged(QScroller::State newState)

Siehe auch QScroller::State.

Dokumentation der Mitgliedsfunktionen

[static] QList<QScroller *> QScroller::activeScrollers()

Gibt eine anwendungsweite Liste der derzeit aktiven QScroller Objekte zurück. Aktive QScroller Objekte befinden sich in einer state(), die nicht QScroller::Inactive ist. Diese Funktion ist nützlich, wenn Sie Ihren eigenen Gestenerkenner schreiben.

[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)

Startet den Bildlauf, so dass das Rechteck rect innerhalb des Ansichtsfensters sichtbar ist, mit zusätzlichen Rändern, die in Pixeln von xmargin und ymargin um das Rechteck herum angegeben werden.

In Fällen, in denen es nicht möglich ist, das Rect plus Ränder innerhalb des Ansichtsfensters unterzubringen, wird der Inhalt so gescrollt, dass so viel wie möglich von rect sichtbar ist.

Die Bildlaufgeschwindigkeit wird so berechnet, dass die angegebene Position nach einer plattformspezifischen Zeitspanne erreicht wird.

Diese Funktion führt das eigentliche Scrollen aus, indem sie scrollTo() aufruft.

Siehe auch scrollTo().

[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)

Dies ist eine überladene Funktion.

Diese Version erreicht ihre Zielposition in scrollTime Millisekunden.

QPointF QScroller::finalPosition() const

Gibt die geschätzte Endposition für die aktuelle Bildlaufbewegung zurück. Gibt die aktuelle Position zurück, wenn der Scroller-Status nicht Scrolling ist. Das Ergebnis ist undefiniert, wenn der Scrollerstatus Inaktiv ist.

Die Zielposition wird in Pixel angegeben.

Siehe auch pixelPerMeter() und scrollTo().

[static] Qt::GestureType QScroller::grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)

Registriert einen benutzerdefinierten Erkenner für Scroll-Gesten, erfasst ihn für target und gibt den resultierenden Gesten-Typ zurück. Wenn scrollGestureType auf TouchGesture gesetzt ist, wird die Geste bei Berührungsereignissen ausgelöst. Wenn sie auf einen der Werte LeftMouseButtonGesture, RightMouseButtonGesture oder MiddleMouseButtonGesture gesetzt ist, wird sie bei Mausereignissen der entsprechenden Schaltfläche ausgelöst.

Für ein einzelnes Objekt kann nur eine Scroll-Geste gleichzeitig aktiv sein. Wenn Sie diese Funktion zweimal für dasselbe Objekt aufrufen, wird die bestehende Geste aufgehoben, bevor die neue aufgenommen wird.

Hinweis: Um unerwünschte Nebeneffekte zu vermeiden, werden Mausereignisse verbraucht, während die Geste ausgelöst wird. Da das anfängliche Mausdruck-Ereignis nicht verbraucht wird, sendet die Geste ein gefälschtes Mausfreigabe-Ereignis an die globale Position (INT_MIN, INT_MIN). Dadurch wird sichergestellt, dass die internen Zustände des Widgets, das den ursprünglichen Mausklick erhalten hat, konsistent sind.

Siehe auch ungrabGesture() und grabbedGesture().

[static] Qt::GestureType QScroller::grabbedGesture(QObject *target)

Gibt den Gesten-Typ zurück, der aktuell für target gegriffen wird, oder 0, wenn keine Geste gegriffen wird.

Siehe auch grabGesture() und ungrabGesture().

bool QScroller::handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)

Diese Funktion wird von Gestenerkennern verwendet, um den Scroller über ein neues Eingabeereignis zu informieren. Der Scroller ändert seine interne state() entsprechend dem Eingabeereignis und den damit verbundenen Scrollereigenschaften. Der Scroller unterscheidet nicht zwischen der Art des Eingabegeräts, von dem das Ereignis stammt. Daher muss das Ereignis in den Typ input, ein position und ein timestamp aufgeteilt werden. Die position muss im Koordinatensystem des Ziels liegen.

Der Rückgabewert ist true, wenn das Ereignis vom aufrufenden Filter konsumiert werden soll, oder false, wenn das Ereignis an die Steuerung weitergeleitet werden soll.

Hinweis: Die Verwendung von grabGesture() sollte für die meisten Anwendungsfälle ausreichend sein.

[static] bool QScroller::hasScroller(QObject *target)

Gibt true zurück, wenn für target bereits ein QScroller Objekt erstellt wurde; andernfalls false.

Siehe auch scroller().

QPointF QScroller::pixelPerMeter() const

Gibt die Metrik Pixel pro Meter für das gescrollte Widget zurück.

Der Wert wird sowohl für die x- als auch für die y-Achse separat unter Verwendung von QPointF angegeben.

Hinweis: Bitte beachten Sie, dass dieser Wert physikalisch korrekt sein sollte. Die tatsächlichen DPI-Einstellungen, die Qt für die Anzeige zurückgibt, können vom zugrunde liegenden Windowing-System absichtlich falsch gemeldet werden, zum Beispiel unter macOS.

[slot] void QScroller::resendPrepareEvent()

Diese Funktion sendet das QScrollPrepareEvent erneut. Der Aufruf von resendPrepareEvent löst eine QScrollPrepareEvent vom Scroller aus. Dadurch kann der Empfänger die Position des Inhalts und die Größe des Inhalts während des Bildlaufs neu einstellen. Ein Aufruf dieser Funktion im inaktiven Zustand ist nutzlos, da das Prepare-Ereignis erneut gesendet wird, bevor der Bildlauf beginnt.

[slot] void QScroller::scrollTo(const QPointF &pos)

Startet den Bildlauf des Widgets, so dass sich der Punkt pos an der oberen linken Position im Ansichtsfenster befindet.

Das Verhalten beim Scrollen außerhalb des gültigen Scrollbereichs ist undefiniert. In diesem Fall kann der Scroller überschießen oder auch nicht.

Die Scrollgeschwindigkeit wird so berechnet, dass die angegebene Position nach einer plattformspezifischen Zeitspanne erreicht wird.

pos wird in Ansichtsfenster-Koordinaten angegeben.

Siehe auch ensureVisible().

[slot] void QScroller::scrollTo(const QPointF &pos, int scrollTime)

Dies ist eine überladene Funktion.

Diese Version erreicht ihre Zielposition in scrollTime Millisekunden.

[static] QScroller *QScroller::scroller(QObject *target)

Gibt den Scroller für das angegebene target zurück. Solange das Objekt existiert, wird diese Funktion immer dieselbe QScroller Instanz zurückgeben. Wenn kein QScroller für das target existiert, wird eines implizit erstellt. Zu keinem Zeitpunkt wird mehr als ein QScroller für ein Objekt aktiv sein.

Siehe auch hasScroller() und target().

[static] const QScroller *QScroller::scroller(const QObject *target)

Dies ist eine überladene Funktion.

Dies ist die const-Version von scroller().

[signal] void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)

QScroller sendet dieses Signal, wenn sich seine Scroller-Eigenschaften ändern. newProperties sind die neuen Scroller-Eigenschaften.

Hinweis: Benachrichtigungssignal für die Eigenschaft scrollerProperties.

Siehe auch scrollerProperties.

void QScroller::setSnapPositionsX(const QList<qreal> &positions)

Setzen Sie die Fangpositionen für die horizontale Achse auf eine Liste von positions. Dies überschreibt alle zuvor eingestellten Fangpositionen und auch ein zuvor eingestelltes Fangintervall. Das Einrasten kann deaktiviert werden, indem Sie eine leere Liste von Positionen einstellen.

void QScroller::setSnapPositionsX(qreal first, qreal interval)

Legen Sie die Fangpositionen für die horizontale Achse in regelmäßigen Abständen fest. Die erste Fangposition ist bei first. Die nächste bei first + interval. Dies kann zur Implementierung einer Listenüberschrift verwendet werden. Dies überschreibt alle zuvor eingestellten Fangpositionen und auch ein zuvor eingestelltes Fangintervall. Das Einrasten kann deaktiviert werden, indem ein Intervall von 0,0 eingestellt wird.

void QScroller::setSnapPositionsY(const QList<qreal> &positions)

Setzen Sie die Fangpositionen für die vertikale Achse auf eine Liste von positions. Dies überschreibt alle zuvor eingestellten Fangpositionen und auch ein zuvor eingestelltes Fangintervall. Das Einrasten kann deaktiviert werden, indem Sie eine leere Liste von Positionen einstellen.

void QScroller::setSnapPositionsY(qreal first, qreal interval)

Legen Sie die Fangpositionen für die vertikale Achse in regelmäßigen Abständen fest. Die erste Fangposition ist bei first. Die nächste bei first + interval. Dies überschreibt alle zuvor eingestellten Fangpositionen und auch ein zuvor eingestelltes Fangintervall. Sie können das Einrasten deaktivieren, indem Sie ein Intervall von 0,0 einstellen.

[signal] void QScroller::stateChanged(QScroller::State newState)

QScroller sendet dieses Signal, wenn sich der Zustand ändert. newState ist der neue Zustand.

Hinweis: Meldesignal für die Eigenschaft state.

Siehe auch state.

void QScroller::stop()

Hält die Bildlaufleiste an und setzt ihren Status auf "Inaktiv" zurück.

QObject *QScroller::target() const

Gibt das Zielobjekt dieses Scrollers zurück.

Siehe auch hasScroller() und scroller().

[static] void QScroller::ungrabGesture(QObject *target)

Hebt die Geste für die target auf. Führt nichts aus, wenn keine Geste gegriffen wird.

Siehe auch grabGesture() und grabbedGesture().

QPointF QScroller::velocity() const

Gibt die aktuelle Bildlaufgeschwindigkeit in Metern pro Sekunde zurück, wenn der Status "Blättern" oder "Ziehen" ist. Andernfalls wird eine Geschwindigkeit von Null zurückgegeben.

Die Geschwindigkeit wird sowohl für die x- als auch für die y-Achse getrennt durch Verwendung von QPointF angegeben.

Siehe auch pixelPerMeter().

© 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.