2012-08-05 19 views
0

我已經使用QSqlQueryModel的子類在我的QML項目中公開ListView的數據。我想在同一時間做這兩個:在另一個線程中使用QSqlQueryModel並通過主線程的指針直接訪問它?

  1. 揭露使用setContextProperty()模型的指針模型來QML。

  2. 將模型留在另一個線程中,因此當我調用模型update()函數(執行最後一個查詢以反映數據庫中更改的數據)時,該模型在重新查詢數據庫時不會阻塞UI。

這可能嗎?如果不是,那麼更好的解決方案是什麼?

回答

0

我的解決方案是:子類QThread,將QmlApplicationViewer指針傳遞給其構造函數,在新類DatabaseQueryThread中,我爲查看器設置上下文屬性。這樣,Qt將允許我直接通過指針提供對查詢模型的訪問。

+0

我想看看這個問題的其他答案。我想到的是:模型在與UI線程共享的單獨線程中,以便模型阻塞時,UI將等待它完成。例如,在一個具有900k行的'QSqlTableModel'上調用'select()',我的MBP需要30秒,在這個MBP中,UI停止等待模型從'select()'返回。如果線程安全並且可以在線程之間共享模型,UI可以等待線程向'QTableView'上的'ready()'然後'setModel()'傳遞一個指向模型的指針。 – 2015-01-11 19:34:59

相關問題