Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么插入和删除错误的QTableView(Qt,C+;+;,sqlite)?_C++_Sql_Qt_Qt4_Pyqt - Fatal编程技术网

C++ 为什么插入和删除错误的QTableView(Qt,C+;+;,sqlite)?

C++ 为什么插入和删除错误的QTableView(Qt,C+;+;,sqlite)?,c++,sql,qt,qt4,pyqt,C++,Sql,Qt,Qt4,Pyqt,在QSqlQueryModel上设置插入或删除查询后,我的QTableView变得一团糟。例如,我通过调用view->hideColumn(ID)隐藏了ID列但在插入或删除后,ID列变为可见 在这种情况下,如何将视图自动重置为以前的设置?我想问题在于每次内容重新加载和行插入\删除时,您最终都会调用。查看setQuery实现,我建议:根据查询,可以重置模型,包括列设置更改,这将触发视图列更新 正如Qt文档所示: QSqlQueryModel类提供了 SQL结果的只读数据模型 设置 因此,我将使用直

QSqlQueryModel
上设置插入或删除查询后,我的
QTableView
变得一团糟。例如,我通过调用
view->hideColumn(ID)隐藏了ID列但在插入或删除后,ID列变为可见

在这种情况下,如何将视图自动重置为以前的设置?

我想问题在于每次内容重新加载和行插入\删除时,您最终都会调用。查看setQuery实现,我建议:根据查询,可以重置模型,包括列设置更改,这将触发视图列更新

正如Qt文档所示:

QSqlQueryModel类提供了 SQL结果的只读数据模型 设置

因此,我将使用直接调用进行数据更新,然后使用相同的查询重新加载模型。或者考虑切换,这对于单表内容操作非常方便,并支持插入更新和删除。查看以下示例是否适用于您:

设置数据库、视图和模型:

QSqlTableModel *_model;
QTableView *_view;

添加新行:

QSqlRecord record;
_model->insertRecord(-1, record);
删除所选行:

希望这有帮助,我想问题在于每次内容重新加载和行插入\删除时,您最终都会调用。查看setQuery实现,我建议:根据查询,可以重置模型,包括列设置更改,这将触发视图列更新

正如Qt文档所示:

QSqlQueryModel类提供了 SQL结果的只读数据模型 设置

因此,我将使用直接调用进行数据更新,然后使用相同的查询重新加载模型。或者考虑切换,这对于单表内容操作非常方便,并支持插入更新和删除。查看以下示例是否适用于您:

设置数据库、视图和模型:

QSqlTableModel *_model;
QTableView *_view;

添加新行:

QSqlRecord record;
_model->insertRecord(-1, record);
删除所选行:


希望这有帮助,请发布一些代码,初始化模型和视图的代码片段会很有帮助。完整的代码在这里提供,版本1751:奇怪的是:选择不会弄乱我的视图,只有插入和删除。我猜它们会触发一些重置视图先前设置的事件。在初始化模型和视图的地方发布一些代码和片段会很有帮助。完整的代码在这里提供,版本1751:奇怪的是:选择不会弄乱我的视图,只会插入和删除。我猜它们会触发一些重置视图先前设置的事件。+1,非常感谢!我会试试你的解决办法,然后回来!目前,直接QSqlQuery调用似乎是解决当前问题的最佳选择。非常感谢你的帮助+非常感谢!我会试试你的解决办法,然后回来!目前,直接QSqlQuery调用似乎是解决当前问题的最佳选择。非常感谢你的帮助!
_model->submitAll();