모델 및 뷰: 작업자 스레드를 사용한 Fetch More 기능
반응형 UI를 유지하면서 작업자 스레드에서 fetchMore()를 구현하는 방법을 보여줍니다.
이 예제에서는 데이터 가져오기가 UI를 차단하지 않도록 QThread 로 이동한 객체에서 QAbstractItemModel::fetchMore()를 활용하는 방법을 보여줍니다. 호출할 때마다 FetchWorker
은 느린 백엔드 서비스를 시뮬레이션하기 위해 2초 동안 잠자기 상태로 전환한 후 UI 스레드로 더 많은 데이터를 전송합니다.
기본 기능
워커 스레드에서 데이터를 가져오는 동안 모델은 목록 끝에 BusyIndicator 을 추가합니다. 데이터가 성공적으로 가져오면 BusyIndicator 이 제거되고 새 항목이 목록에 추가됩니다. ListView 은 일반적인 방식으로 사용되며 느린 모델을 처리하기 위해 조정할 필요가 없습니다.
책임
항목 모델 변경(이 경우 행 삽입 및 제거)은 UI 스레드에서 이루어져야 합니다. 작업자 스레드 객체는 데이터 블록 구조를 천천히 구성하고 페이로드로 데이터 블록의 QList 을 포함하는 dataFetched
신호를 내보내고, 이 신호는 Qt::QueuedConnection 을 통해 ThreadedFetchMoreModel::dataReceived() 슬롯으로 전송되어 UI 스레드의 데이터 목록에 추가됩니다. UI 스레드는 fetchDataBlock() 신호를 작업자 객체에 보내기 전에 목록 끝에 플레이스홀더 항목을 추가하여 가져오기 프로세스를 시작하고, 새 항목을 목록에 추가하기 전에 플레이스홀더를 제거합니다.
사용 가능한 모든 데이터를 가져온 후 작업자 스레드 객체는 noMoreToFetch
신호를 모델에 전송하고, 그 이후부터는 canFetchMore() 메서드가 항상 false
을 반환합니다.
© 2025 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.