【问题标题】:How to refresh QTableView during SQLite table update?SQLite表更新期间如何刷新QTableView?
【发布时间】:2014-01-19 05:34:25
【问题描述】:

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

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

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

【问题讨论】:

  • 1) “行数问题(需要...)”到底是什么意思? 2)你到底有什么计算量很大? 3) 如果没有 SQL,您将如何更新表? 4) 计算繁重的工作方法到底有什么问题?
  • 1. SQLite 没有 rowCount 功能。 2. 我的意思是我只想更新QTableView 中的相关单元格。 3.使用QSqlTableModel。 4. 我不想频繁地重新填充模型。

标签: c++ sql multithreading qt sqlite


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2017-03-04
    • 2012-01-07
    • 1970-01-01
    • 2017-03-01
    相关资源
    最近更新 更多