如何在SQLite表更新期间刷新QTableView?

时间:2014-01-01 18:07:58

标签: c++ sql multithreading qt sqlite

我使用C ++ / Qt 4.8,Microsoft Visual Studio 2010,SQLite 3.8.1。我的GUI应用程序包含几个线程:默认的GUI线程,主线程,一些工作线程。主线程处理工作线程。工作人员发出信号,要求主人更新SQLite数据库中表格的某些单元格。 因此,有2个数据库连接:1个用于GUI线程,QTableViewQSqlTableModel后代,1个用于主线程。主发出信号,要求GUI线程更新QTableView。考虑到SQLite行计数问题(需要canFetchMore()),如何更新QTableView?我不希望update_slot()是计算密集型的。主线程仅生成“UPDATE表”查询。我应该更新没有SQL的表,以便发出dataChanged信号吗?我已经读过QSqlTableModelQSqlQuery的高级替代方法,用于导航和修改单个SQL表。它通常会导致代码减少,并且不需要SQL语法知识 我遇到过这样的代码来更新QTableView(SQLite不能直接获取行数):

m_result_table_model->select();
while(m_result_table_model->canFetchMore()) 
{
  m_result_table_model->fetchMore();            
}

每行更新后是否应调用此代码?当我在QCoreApplication::processEvents();中使用update_slot()时,我遇到了堆栈溢出异常。

1 个答案:

答案 0 :(得分:1)

无法强制QSqlQueryModel刷新某些行。您只能清除它并按照您所描述的新数据重新填充它。如果这还不够快,您应该手动实现此行为。选项是创建自己的模型类,子类QSqlTableModel或使用QStandardItemModel。