8

在 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
4

3 回答 3

12

我可以确认该错误与您在 Qt 4.5.1 中报告的完全相同,并且文档(例如此处)仍然给出了错误的示例(即包含removeColumn调用的示例)。

作为一种解决方法,我尝试编写一个连接到beforeUpdate信号的插槽,目的是检查即将在数据库中更新的 QSqlRecord 有什么问题并可能修复它,但我无法让它工作-- 对该记录参数的方法的任何调用都会使我的玩具应用程序因 BusError 崩溃。

所以我已经放弃了这个想法,转而使用毫无疑问的正确方法(可见性应该由视图决定,而不是由模型决定,对吧?-):改为用removeColumnand 代替 it 调用tableView->setColumnHidden(0, true)。这样,ID 就被隐藏了,一切正常。

所以我认为我们可以确认存在文档错误并在 Qt 跟踪器中打开一个关于它的问题,所以它可以在下一轮文档中修复,对吧?

于 2009-07-18T19:59:24.393 回答
0

看来这件事的原因是一致的

sqlmodel->removeColumn(0);

注释掉后,一切正常。因此,我必须找到另一种不在表格中显示 ID 的方法;-)

编辑 我说过“似乎”,因为在“Qt 开发基础”的示例中,Johan Thelin 也删除了第一列。所以,如果其他人也尝试这个并报告结果会很好。

于 2009-06-26T13:03:36.883 回答
0

我在 PyQt 中使用 Qt 4.6.1,问题仍然存在。删除“removeColumn(0)”解决了这个问题。

于 2010-03-05T08:54:55.513 回答