Modelos y vistas: Funcionalidad Fetch More utilizando un subproceso de trabajo
Demuestra cómo implementar fetchMore() en un subproceso de trabajador manteniendo una interfaz de usuario receptiva.

Este ejemplo muestra cómo utilizar QAbstractItemModel::fetchMore() con un objeto movido a QThread para que la obtención de datos no bloquee la interfaz de usuario. En cada llamada, FetchWorker duerme durante 2 segundos, para simular un servicio backend lento, antes de enviar más datos al subproceso de la interfaz de usuario.
Funcionalidad básica
Mientras se obtienen los datos en el subproceso del trabajador, el modelo añade un BusyIndicator al final de la lista. Una vez que los datos se han obtenido correctamente, se elimina BusyIndicator y se añaden nuevos elementos a la lista. La dirección ListView se utiliza de la forma habitual y no es necesario ajustarla para hacer frente a la lentitud del modelo.
Responsabilidades
Los cambios en el modelo de ítems (en este caso la inserción y eliminación de filas) deben realizarse en el subproceso de interfaz de usuario. El objeto worker thread construye lentamente structs DataBlock, y emite la señal dataFetched con un QList de bloques de datos como carga útil; la señal se envía a través de un Qt::QueuedConnection a la ranura ThreadedFetchMoreModel::dataReceived(), que los añade a la lista de datos en el hilo UI. El subproceso de interfaz de usuario añade un marcador de posición al final de la lista antes de enviar la señal fetchDataBlock() al objeto trabajador para iniciar el proceso de obtención, y elimina el marcador de posición antes de añadir nuevos elementos a la lista.
Una vez obtenidos todos los datos disponibles, el objeto worker envía la señal noMoreToFetch al modelo; a partir de ese momento, el método canFetchMore() siempre devuelve 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.