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