0
QSqlQueryModel의 하위 클래스를 사용하여 QML 프로젝트의 ListView에 대한 데이터를 노출했습니다. 저도 같은 시간에이 두 가지를 수행 할 : 다른 스레드에서 QSqlQueryModel을 사용하고 주 스레드에서 포인터로 직접 액세스합니까?
- 는 모델의 포인터와
setContextProperty()
를 사용하여 QML로 모델을 노출. 모델을 다른 스레드에 남겨 두어 모델
update()
(데이터베이스에서 변경된 데이터를 반영하기 위해 마지막 쿼리를 실행 함)을 호출 할 때 모델이 데이터베이스를 다시 쿼리 할 때 UI를 차단하지 않습니다.
가능합니까? 그렇지 않은 경우 더 나은 솔루션은 무엇입니까?
이 문제에 대한 다른 답변을보고 싶습니다. 내가 생각한 것은 모델이 블로킹 될 때 UI가 완료 될 때까지 기다릴 수 있도록 UI 스레드와 공유 된 별도의 스레드에있는 모델입니다. 예를 들어 900k 행의'QSqlTableModel'에서'select()'를 호출하면 내 MBP에서 30 초가 걸리고 UI는 모델이'select()'에서 반환되기를 기다리는 동안 멈 춥니 다. UI는 스레드가 안전하고 스레드간에 모델을 공유 할 수있는 경우 모델에 대한 포인터를 전달하는'QTableView'에서'ready()'와'setModel()'신호를 기다릴 수 있습니다. –