QScroller Class
Die Klasse „QScroller“ ermöglicht kinetisches Scrollen für jedes Scroll-Widget oder jedes Grafikelement. Mehr...
| Header: | #include <QScroller> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Erbt von: | QObject |
Öffentliche Typen
| enum | Input { InputPress, InputMove, InputRelease } |
| enum | ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture } |
| enum | State { Inactive, Pressed, Dragging, Scrolling } |
Eigenschaften
- scrollerProperties : QScrollerProperties
- state : State
Ö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) |
Ausführliche Beschreibung
Beim kinetischen Scrollen kann der Benutzer das Widget in eine bestimmte Richtung schieben, woraufhin es so lange in diese Richtung weiterrollt, bis es entweder vom Benutzer oder durch Reibung gestoppt wird. Aspekte wie Trägheit, Reibung und andere physikalische Konzepte können angepasst werden, um ein intuitives Benutzererlebnis zu optimieren.
Das QScroller-Objekt speichert die aktuelle Position und Scrollgeschwindigkeit und kümmert sich um die Aktualisierungen. QScroller kann durch eine Wischgeste
oder direkt wie folgt ausgelöst werden:
QWidget *w = ...;
QScroller *scroller = QScroller::scroller(w);
scroller->scrollTo(QPointF(100, 100));Die gescrollten QObjects erhalten ein „ QScrollPrepareEvent “, sobald der Scroller seine Geometrieinformationen aktualisieren muss, und ein „ QScrollEvent “, sobald der Inhalt des Objekts tatsächlich gescrollt werden soll.
Der Scroller verwendet den globalen „ QAbstractAnimation “-Timer, um seine QScrollEvents zu generieren. Dies kann mit „ QScrollerProperties::FrameRate “ für jeden QScroller individuell geändert werden.
Auch wenn dieser kinetische Scroller über „ QScrollerProperties “ eine Vielzahl von Einstellungen bietet, empfehlen wir, alle Werte auf ihren plattformoptimierten Standardwerten zu belassen. Bevor Sie Änderungen vornehmen, können Sie mit dem Beispiel „ plot “ im Verzeichnis „ scroller “ experimentieren.
Siehe auch QScrollEvent, QScrollPrepareEvent und QScrollerProperties.
Dokumentation zu Mitgliedstypen
enum QScroller::Input
Diese Enumeration enthält eine vom Eingabegerät unabhängige Darstellung von Eingabeereignissen, die für QScroller relevant sind.
| Konstante | Wert | Beschreibung |
|---|---|---|
QScroller::InputPress | 1 | Der Benutzer hat das Eingabegerät betätigt (z. B. QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin) |
QScroller::InputMove | 2 | Der Benutzer hat das Eingabegerät bewegt (z. B. QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate) |
QScroller::InputRelease | 3 | Der Benutzer hat das Eingabegerät losgelassen (z. B. QEvent::MouseButtonRelease, QEvent::GraphicsSceneMouseRelease, QEvent::TouchEnd) |
enum QScroller::ScrollerGestureType
Diese Enumeration enthält die verschiedenen Gestentypen, die vom Gestenerkennungsmodul „ QScroller “ unterstützt werden.
| Konstante | Wert | Beschreibung |
|---|---|---|
QScroller::TouchGesture | 0 | Der Gestenerkennungsmechanismus wird nur bei Berührungsereignissen ausgelöst. Genauer gesagt reagiert er bei Verwendung eines Touchscreens auf einzelne Berührungspunkte und bei Verwendung eines Touchpads auf zwei Berührungspunkte. |
QScroller::LeftMouseButtonGesture | 1 | Der Gestenerkenner wird nur bei Ereignissen der linken Maustaste ausgelöst. |
QScroller::MiddleMouseButtonGesture | 3 | Der Gestenerkennungsmechanismus wird nur bei Ereignissen der mittleren Maustaste ausgelöst. |
QScroller::RightMouseButtonGesture | 2 | Der Gestenerkenner wird nur bei Ereignissen der rechten Maustaste ausgelöst. |
enum QScroller::State
Diese Enumeration enthält die verschiedenen Zustände von „ QScroller “.
| Konstante | Wert | Beschreibung |
|---|---|---|
QScroller::Inactive | 0 | Der Scroller scrollt nicht und es wurde keine Taste gedrückt. |
QScroller::Pressed | 1 | Ein Touch-Ereignis wurde empfangen oder die Maustaste wurde gedrückt, aber der Scrollbereich wird derzeit nicht gezogen. |
QScroller::Dragging | 2 | Der Scrollbereich folgt derzeit dem Berührungspunkt oder der Maus. |
QScroller::Scrolling | 3 | Der Scrollbereich bewegt sich von selbst. |
Eigenschaftsdokumentation
scrollerProperties : QScrollerProperties
Diese Eigenschaft enthält die Eigenschaften dieses Scrollers. Die Eigenschaften werden vom „ QScroller “ verwendet, um dessen Scrollverhalten zu bestimmen.
Zugriffsfunktionen:
| QScrollerProperties | scrollerProperties() const |
| void | setScrollerProperties(const QScrollerProperties &prop) |
Notifier-Signal:
| void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
[read-only] state : State
Diese Eigenschaft speichert den Status des Scrollers
Zugriffsfunktionen:
| QScroller::State | state() const |
Benachrichtigungssignal:
| void | stateChanged(QScroller::State newState) |
Siehe auch QScroller::State.
Dokumentation der Member-Funktionen
[static] QList<QScroller *> QScroller::activeScrollers()
Gibt eine anwendungsweite Liste der derzeit aktiven „ QScroller “-Objekte zurück. Aktive „ QScroller “-Objekte befinden sich in einem „ state()“, das nicht „ QScroller::Inactive “ ist. Diese Funktion ist nützlich, wenn Sie einen eigenen Gestenerkäufer erstellen.
[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
Es wird so gescrollt, dass das Rechteck rect innerhalb des Ansichtsbereichs sichtbar ist, wobei um das Rechteck herum zusätzliche Ränder in Pixeln gemäß xmargin und ymargin festgelegt werden.
In Fällen, in denen das Rechteck zusammen mit den Rändern nicht vollständig in den Ansichtsbereich passt, 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 plattformabhängigen Zeitspanne erreicht wird.
Diese Funktion führt das eigentliche Scrollen durch, indem sie scrollTo() aufruft.
Hinweis: Dieser Slot ist überladen. Um eine Verbindung zu diesem Slot herzustellen:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
scroller, qOverload(&QScroller::ensureVisible));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
scroller, [receiver = scroller](const QRectF &rect, qreal xmargin, qreal ymargin) { receiver->ensureVisible(rect, xmargin, ymargin); }); Siehe auch ` scrollTo()`.
[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
Diese Version wird ihre Zielposition in scrollTime Millisekunden erreichen.
Hinweis: Dieser Slot ist überlastet. So stellen Sie eine Verbindung zu diesem Slot her:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
scroller, qOverload(&QScroller::ensureVisible));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
scroller, [receiver = scroller](const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime) { receiver->ensureVisible(rect, xmargin, ymargin, scrollTime); }); QPointF QScroller::finalPosition() const
Gibt die geschätzte Endposition für die aktuelle Bildlaufbewegung zurück. Gibt die aktuelle Position zurück, wenn der Status des Bildlaufelements nicht „Scrolling“ ist. Das Ergebnis ist undefiniert, wenn der Status des Bildlaufelements „Inactive“ ist.
Die Zielposition wird in Pixeln 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, bindet ihn an die „ target “ und gibt den resultierenden Gestentyp zurück. Wenn „ scrollGestureType “ auf „ TouchGesture “ gesetzt ist, wird die Geste bei Berührungsereignissen ausgelöst. Ist sie auf einen der Werte „ LeftMouseButtonGesture “, „ RightMouseButtonGesture “ oder „ MiddleMouseButtonGesture “ gesetzt, wird sie bei Mausereignissen der entsprechenden Schaltfläche ausgelöst.
Auf einem einzelnen Objekt kann jeweils nur eine Scroll-Geste aktiv sein. Wenn Sie diese Funktion zweimal für dasselbe Objekt aufrufen, wird die bestehende Geste aufgehoben, bevor die neue Geste aktiviert wird.
Hinweis: Um unerwünschte Nebenwirkungenzu vermeiden, werden Mausereignisse während der Auslösung der Geste verarbeitet. Da das ursprüngliche Mausklick-Ereignis nicht verarbeitet wird, sendet die Geste ein simuliertes Mausloslass-Ereignis an der globalen Position (INT_MIN, INT_MIN). Dadurch wird sichergestellt, dass die internen Zustände des Widgets, das den ursprünglichen Mausklick empfangen hat, konsistent bleiben.
Siehe auch ungrabGesture() und grabbedGesture().
[static] Qt::GestureType QScroller::grabbedGesture(QObject *target)
Gibt den derzeit für die „ target “ erfassten Gestentyp zurück oder 0, wenn keine Geste erfasst wurde.
Siehe auch „ grabGesture()“ und „ ungrabGesture()“.
bool QScroller::handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)
Diese Funktion wird von Gestenerkennungsprogrammen verwendet, um den Scroller über ein neues Eingabeereignis zu informieren. Der Scroller passt seine interne „ state()“-Funktion entsprechend dem Eingabeereignis und den damit verbundenen Scroller-Eigenschaften an. Der Scroller unterscheidet nicht zwischen den verschiedenen Arten von Eingabegeräten, von denen das Ereignis stammt. Daher muss das Ereignis in den Typ „ input “, einen „ position “ und einen „ timestamp “ in Millisekunden aufgeteilt werden. Die „ position “ muss im Koordinatensystem des Ziels angegeben werden.
Der Rückgabewert ist „ true “, wenn das Ereignis vom aufrufenden Filter verarbeitet werden soll, oder „ false “, wenn das Ereignis an das Steuerelement weitergeleitet werden soll.
Hinweis: Die Verwendung von ` grabGesture()` sollte für die meisten Anwendungsfälle ausreichen.
[static] bool QScroller::hasScroller(QObject *target)
Gibt „ true “ zurück, wenn bereits ein „ QScroller “-Objekt für „ target “ 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 für die x- und die y-Achse separat mithilfe von ` QPointF` zurückgegeben.
Hinweis: Bitte beachten Sie, dass dieser Wert physikalisch korrekt sein sollte. Die tatsächlichen DPI-Einstellungen, die Qt für das Display zurückgibt, können vom zugrunde liegenden Fenstersystem – beispielsweise unter macOS – absichtlich falsch gemeldet werden.
[slot] void QScroller::resendPrepareEvent()
Diese Funktion sendet das „ QScrollPrepareEvent “ erneut. Der Aufruf von „resendPrepareEvent“ löst ein „ QScrollPrepareEvent “ vom Scroller aus. Dadurch kann der Empfänger die Position und Größe des Inhalts während des Scrollens neu festlegen. Der Aufruf dieser Funktion im inaktiven Zustand ist sinnlos, da das „Prepare Event“ vor Beginn des Scrollens erneut gesendet wird.
[slot] void QScroller::scrollTo(const QPointF &pos)
Löst das Scrollen des Widgets aus, sodass der Punkt pos an der Position oben links im Ansichtsbereich liegt.
Das Verhalten beim Scrollen außerhalb des gültigen Scrollbereichs ist undefiniert. In diesem Fall kann der Scroller die Position überschreiten oder auch nicht.
Die Scrollgeschwindigkeit wird so berechnet, dass die angegebene Position nach einer plattformdefinierten Zeitspanne erreicht wird.
pos wird in Ansichtsbereichskoordinaten angegeben.
Hinweis: Dieser Slot ist überladen. So verbinden Sie sich mit diesem Slot:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
scroller, qOverload(&QScroller::scrollTo));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
scroller, [receiver = scroller](const QPointF &pos) { receiver->scrollTo(pos); }); Siehe auch ` ensureVisible()`.
[slot] void QScroller::scrollTo(const QPointF &pos, int scrollTime)
Diese Version wird ihre Zielposition in scrollTime Millisekunden erreichen.
Hinweis: Dieser Slot ist überlastet. So stellen Sie eine Verbindung zu diesem Slot her:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
scroller, qOverload(&QScroller::scrollTo));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
scroller, [receiver = scroller](const QPointF &pos, int scrollTime) { receiver->scrollTo(pos, scrollTime); }); [static] QScroller *QScroller::scroller(QObject *target)
Gibt den Scroller für das angegebene „ target “ zurück. Solange das Objekt existiert, gibt diese Funktion immer dieselbe „ QScroller “-Instanz zurück. Falls für „ target “ kein „ QScroller “ existiert, wird implizit eines erstellt. Zu keinem Zeitpunkt ist mehr als ein „ QScroller “ für ein Objekt aktiv.
Siehe auch „ hasScroller()“ und „ target()“.
[static] const QScroller *QScroller::scroller(const QObject *target)
Dies ist die „const“-Version von scroller().
Dies ist eine überladene Funktion.
[signal] void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)
QScroller gibt dieses Signal aus, sobald sich die Eigenschaften des Scrollers ändern. „ newProperties “ sind die neuen Eigenschaften des Scrollers.
Hinweis: Notifier -Signal für die Eigenschaft „ scrollerProperties “.
Siehe auch „ scrollerProperties “.
void QScroller::setSnapPositionsX(const QList<qreal> &positions)
Legen Sie die Einrastpositionen für die horizontale Achse als Liste fest: positions. Dadurch werden alle zuvor festgelegten Einrastpositionen sowie ein zuvor festgelegtes Einrastintervall überschrieben. Das Einrasten kann deaktiviert werden, indem eine leere Liste von Positionen festgelegt wird.
void QScroller::setSnapPositionsX(qreal first, qreal interval)
Legen Sie die Einrastpositionen für die horizontale Achse in regelmäßigen Abständen fest. Die erste Einrastposition liegt bei first. Die nächste bei first + interval. Dies kann zur Umsetzung einer Listenüberschrift verwendet werden. Dadurch werden alle zuvor festgelegten Einrastpositionen sowie ein zuvor festgelegtes Einrastintervall überschrieben. Das Einrasten kann durch Festlegen eines Intervalls von 0,0 deaktiviert werden.
void QScroller::setSnapPositionsY(const QList<qreal> &positions)
Legen Sie die Einrastpositionen für die vertikale Achse als Liste fest: positions. Dadurch werden alle zuvor festgelegten Einrastpositionen sowie ein zuvor festgelegtes Einrastintervall überschrieben. Das Einrasten kann deaktiviert werden, indem eine leere Liste von Positionen festgelegt wird.
void QScroller::setSnapPositionsY(qreal first, qreal interval)
Stellen Sie die Einrastpositionen für die vertikale Achse auf gleichmäßige Abstände ein. Die erste Einrastposition liegt bei first. Die nächste bei first + interval. Dadurch werden alle zuvor festgelegten Einrastpositionen sowie ein zuvor festgelegtes Einrastintervall überschrieben. Das Einrasten kann deaktiviert werden, indem ein Intervall von 0,0 festgelegt wird.
[signal] void QScroller::stateChanged(QScroller::State newState)
QScroller gibt dieses Signal aus, sobald sich der Zustand ändert. „ newState “ ist der neue Zustand.
Hinweis: Notifier -Signal für die Eigenschaft „ state “.
Siehe auch „ state “.
void QScroller::stop()
Hält den Scroller an und setzt seinen Status wieder 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)
Gibt die Geste für den target frei. Führt keine Aktion aus, wenn keine Geste erfasst wurde.
Siehe auch ` grabGesture()` und ` grabbedGesture()`.
QPointF QScroller::velocity() const
Gibt die aktuelle Bildlaufgeschwindigkeit in Metern pro Sekunde zurück, wenn der Status „Scrolling“ oder „Dragging“ ist. Andernfalls wird eine Geschwindigkeit von Null zurückgegeben.
Die Geschwindigkeit wird für die x- und die y-Achse separat mithilfe von ` QPointF` gemeldet.
Siehe auch ` pixelPerMeter()`.
© 2026 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.