Modelle und Ansichten: „Fetch More“-Funktionalität mithilfe eines Worker-Threads
Veranschaulicht, wie man `fetchMore()` in einem Worker-Thread implementiert und dabei eine reaktionsschnelle Benutzeroberfläche gewährleistet.

Dieses Beispiel zeigt, wie „ QAbstractItemModel::fetchMore()“ mit einem Objekt genutzt wird, das in einen „ QThread “ verschoben wurde, damit das Abrufen der Daten die Benutzeroberfläche nicht blockiert. Bei jedem Aufruf ruht der „ FetchWorker “ 2 Sekunden lang, um einen langsamen Backend-Dienst zu simulieren, bevor weitere Daten an den UI-Thread gesendet werden.
Grundlegende Funktionsweise
Während die Daten im Worker-Thread abgerufen werden, fügt das Modell ein ` BusyIndicator ` am Ende der Liste hinzu. Sobald die Daten erfolgreich abgerufen wurden, wird das ` BusyIndicator ` entfernt und neue Elemente werden an die Liste angehängt. Das ` ListView ` wird auf die übliche Weise verwendet und muss nicht angepasst werden, um mit dem langsamen Modell umzugehen.
Verantwortlichkeiten
Änderungen am Elementmodell (in diesem Fall das Einfügen und Entfernen von Zeilen) müssen im UI-Thread erfolgen. Das Worker-Thread-Objekt erstellt langsam „DataBlock“-Strukturen und sendet das Signal „ dataFetched “ mit einem „ QList “ aus Datenblöcken als Nutzlast; das Signal wird über ein „ Qt::QueuedConnection “ an den Slot „ThreadedFetchMoreModel::dataReceived()“ gesendet, der diese an die Datenliste im UI-Thread anhängt. Der UI-Thread fügt am Ende der Liste ein Platzhalterelement hinzu, bevor er das Signal `fetchDataBlock()` an das Worker-Objekt sendet, um den Abrufvorgang zu starten, und entfernt den Platzhalter, bevor neue Elemente an die Liste angehängt werden.
Nachdem alle verfügbaren Daten abgerufen wurden, sendet das Worker-Thread-Objekt das Signal „ noMoreToFetch “ an das Modell; von diesem Zeitpunkt an gibt die Methode „canFetchMore()“ stets „ false “ zurück.
© 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.