모델과 뷰: 워커 스레드를 활용한 추가 데이터 가져오기 기능
반응성이 뛰어난 UI를 유지하면서 작업자 스레드에서 fetchMore()를 구현하는 방법을 보여줍니다.

이 예제는 데이터 가져오기가 UI를 차단하지 않도록, 객체를 QThread 로 이동시킨 후 ` QAbstractItemModel::fetchMore()`를 활용하는 방법을 보여줍니다. 각 호출 시, FetchWorker 는 느린 백엔드 서비스를 시뮬레이션하기 위해 2초 동안 대기한 후, UI 스레드로 더 많은 데이터를 전송합니다.
기본 기능
워커 스레드에서 데이터를 가져오는 동안, 모델은 BusyIndicator 을 리스트의 끝에 추가합니다. 데이터 가져오기가 성공적으로 완료되면 BusyIndicator 이 제거되고, 새로운 항목들이 리스트에 추가됩니다. ListView 은 일반적인 방식으로 사용되며, 느린 모델을 처리하기 위해 별도의 조정이 필요하지 않습니다.
책임
항목 모델의 변경 작업(이 경우 행 삽입 및 제거)은 UI 스레드에서 수행되어야 합니다. 작업자 스레드 객체는 DataBlock 구조체를 천천히 생성하고, 데이터 블록의 QList 을 페이로드로 하여 dataFetched 신호를 발산합니다. 이 신호는 Qt::QueuedConnection 을 통해 ThreadedFetchMoreModel::dataReceived() 슬롯으로 전송되며, UI 스레드에서 데이터 목록에 해당 항목들을 추가합니다. UI 스레드는 목록의 끝에 자리 표시자 항목을 추가한 후, 워커 객체에 fetchDataBlock() 신호를 보내 가져오기 프로세스를 시작하고, 목록에 새 항목을 추가하기 전에 자리 표시자를 제거합니다.
사용 가능한 모든 데이터가 가져온 후, 워커 스레드 객체는 모델에 ` noMoreToFetch ` 신호를 보냅니다. 그 이후부터는 `canFetchMore()` 메서드가 항상 ` 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.