在Qt 4.4中设置表格模型之后:
QSqlTableModel *sqlmodel = new QSqlTableModel();
sqlmodel->setTable("Names");
sqlmodel->setEditStrategy(QSqlTableModel::OnFieldChange);
sqlmodel->select();
sqlmodel->removeColumn(0);
tableView->setModel(sqlmodel);
tableView->show();
内容显示正确,但无法进行编辑,错误:
QSqlQuery::value: not positioned on a valid record
答案 0 :(得分:12)
我可以在Qt 4.5.1中确认该错误的存在与您报告的完全相同,并且文档,例如here仍然提供了一个错误的示例(即包含removeColumn
调用的示例)。
作为一种解决方法,我试图写一个连接到beforeUpdate
信号的插槽,想要检查QSqlRecord有什么问题,它将在DB中更新并可能修复它,但是我无法解决这个问题 - 对该记录参数的方法的任何调用都会导致我的玩具应用程序崩溃。
所以我已经放弃了这个想法并转而采用正确的方法(可见性应该由视图决定,而不是模型,对吧? - ):失去removeColumn
而是代替它,而是致电tableView->setColumnHidden(0, true)
。这样就可以隐藏ID并且一切正常。
所以我认为我们可以确认文档错误并在Qt跟踪器中打开它的问题,因此可以在下一轮文档中修复,对吧?
答案 1 :(得分:0)
似乎原因就在于
sqlmodel->removeColumn(0);
在评论之后,一切都很完美。 因此,我必须找到另一种不在表格中显示ID的方法; - )
修改强> 我说“似乎”,因为在“Qt开发基础”的例子中,Johan Thelin也删除了第一列。所以,如果其他人也尝试这个并报告结果,那就太好了。
答案 2 :(得分:0)
我在PyQt中使用Qt 4.6.1,问题仍然存在。删除“removeColumn(0)”解决了这个问题。