如何使用计时器正确更新QTableView?

时间:2014-02-24 08:45:27

标签: c++ qt sqlite qtableview

我使用C ++,Qt 4.8.5,Visual Studio 2010,SQLite。我有一个基于Qt的GUI应用程序,其中包含QTableView。该程序分析一些数据并更改一些单元格而不添加/删除行。我使用QTimer使用QTableView模式刷新OnManualSubmit。即使没有修改,在模型的定时器槽中多次调用submitAll()方法是否安全?如果submitAll()失败,那么我是否必须手动调用我的模型的select()方法?如何为SQLite提取行 - 在submitAll()调用后我是否需要它以便观察第257行和更多行中单元格的修改?

有时我在第二次'submitAll()'调用之后遇到类似“参数计数不匹配”(QSqlError::StatementError)的错误。可能的原因是什么?该程序是多线程的,工作线程将数据发送到主线程。计时器每3秒触发一次(缓冲更改)。它不是QTableView中的即时单元更新。

1 个答案:

答案 0 :(得分:0)

您不应该直接更新您的视图(或通过计时器 - 它是一个很大的开销)。您必须在模型中的每个数据更改上调用emit dataChanged( ... );。但是如果你想要一个肮脏的黑客,你可以简单地调用(来自模型)'发出dataChanged(QModelIndex(),QModelIndex());'当您需要更新视图时。