Modèles et vues : Fonctionnalité Fetch More à l'aide d'un fil d'exécution
Démontre comment implémenter la fonction fetchMore() dans un thread de travailleur tout en maintenant une interface utilisateur réactive.

Cet exemple montre comment utiliser QAbstractItemModel::fetchMore() avec un objet déplacé vers QThread afin que la récupération des données ne bloque pas l'interface utilisateur. À chaque appel, FetchWorker dort pendant 2 secondes, pour simuler un service lent, avant d'envoyer plus de données au thread de l'interface utilisateur.
Fonctionnalité de base
Pendant que les données sont récupérées dans le thread du travailleur, le modèle ajoute un BusyIndicator à la fin de la liste. Une fois les données récupérées, le BusyIndicator est supprimé et les nouveaux éléments sont ajoutés à la liste. Le ListView est utilisé de manière classique et n'a pas besoin d'être adapté au modèle lent.
Responsabilités
Les modifications du modèle des éléments (dans ce cas, l'insertion et la suppression de lignes) doivent être effectuées dans le fil d'exécution de l'interface utilisateur. L'objet thread worker construit lentement des structures DataBlock et émet le signal dataFetched avec un QList de blocs de données comme charge utile ; le signal est envoyé via Qt::QueuedConnection au slot ThreadedFetchMoreModel::dataReceived(), qui les ajoute à la liste de données dans le thread UI. Le fil d'exécution de l'interface utilisateur ajoute un élément de remplacement à la fin de la liste avant d'envoyer le signal fetchDataBlock() à l'objet travailleur pour lancer le processus de récupération, et supprime l'élément de remplacement avant d'ajouter de nouveaux éléments à la liste.
Une fois que toutes les données disponibles ont été récupérées, l'objet thread worker envoie le signal noMoreToFetch au modèle ; à partir de ce moment, la méthode canFetchMore() renvoie toujours false.
© 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.