Revision control
++ // Copyright (C) 2025 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
++
++ /*!
++ \example models/threadedfetchmore
++ \title Models and Views: Fetch More functionality using a worker thread
++ \brief Demonstrates how to implement fetchMore() in a worker thread while maintaining a responsive UI.
++ \examplecategory {User Interface Components}
++ \image qml-threadedfetchmore-example.png {List view showing contact
++ items with loading indicator at bottom}
++
++ This example shows how to utilize QAbstractItemModel::fetchMore() with an
++ object moved to a QThread so that the data fetching does not block the UI.
++ On each call, the \c FetchWorker sleeps for 2 seconds, to simulate a slow
++ backend service, before sending more data to the UI thread.
++
++ \section1 Basic functionality
++
++ While data is being fetched in the worker thread, the model adds a
++ BusyIndicator to the end of list. Once data is successfully fetched, the
++ BusyIndicator is removed, and new items are appended to the list.
++ The ListView is used in the typical way, and does not need adjustment
++ to deal with the slow model.
++
++ \section1 Responsibilities
++
++ The item model changes (in this case inserting and removing rows) must
++ happen in the UI thread. The worker thread object slowly constructs
++ DataBlock structs, and emits the \c dataFetched signal with a QList of data
++ blocks as the payload; the signal is sent via a Qt::QueuedConnection to the
++ ThreadedFetchMoreModel::dataReceived() slot, which appends them to the data
++ list in the UI thread. The UI thread adds a placeholder item to the end of
++ the list before sending the fetchDataBlock() signal to the worker object to
++ kick off the fetching process, and removes the placeholder before appending
++ new items to the list.
++
++ After all available data is fetched, the worker thread object sends the
++ \c noMoreToFetch signal to the model; from then on, the canFetchMore()
++ method always returns \c false.
++ */