2012-08-05 54 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

相关问题