Qt QSqlRelationalTableModel-插入大于256的记录

Qt QSqlRelationalTableModel-插入大于256的记录,qt,sqlite,qsqlquery,qsqltablemodel,qsqldatabase,Qt,Sqlite,Qsqlquery,Qsqltablemodel,Qsqldatabase,我在SQLite数据库中有一个表节点={id,name},和一个表段={id,nodeFrom,nodeTo},其中node.id和segment.id是自动递增字段 我正在为节点创建QSqlTableModel,如下所示: nodeModel = new QSqlTableModel(this,db); nodeModel->setTable("Node"); nodeModel->setEditStrategy(QSqlTableModel::OnFieldChange); s

我在SQLite数据库中有一个表节点={id,name},和一个表={id,nodeFrom,nodeTo},其中node.id和segment.id是自动递增字段

我正在为节点创建QSqlTableModel,如下所示:

nodeModel = new QSqlTableModel(this,db);
nodeModel->setTable("Node");
nodeModel->setEditStrategy(QSqlTableModel::OnFieldChange);
segModel = new QSqlRelationalTableModel(this,db);
segModel->setTable("Segment");
segModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
segModel->setRelation(segModel->fieldIndex("nodeFrom"),
                                QSqlRelation("Node","id","name"));
segModel->setRelation(segModel->fieldIndex("nodeTo"),
                                QSqlRelation("Node","id","name"));
我使用以下代码插入节点:

int addNode(QString name) {
    QSqlRecord newRec = nodeModel->record();
    newRec.setGenerated("id",false);
    newRec.setValue("name",name);
    if (not nodeModel->insertRecord(-1,newRec))
        qDebug() << nodeModel->lastError();
    if (not nodeModel->submit())
        qDebug() << nodeModel->lastError();
    return nodeModel->query().lastInsertId().toInt();
}
然后我有以下插入段的代码:

int addSegment(int nodeFrom, int nodeTo) {
    QSqlRecord newRec = segModel->record();
    newRec.setGenerated("id",false);
    newRec.setValue(1,nodeFrom);
    newRec.setValue(2,nodeTo);
    if (not segModel->insertRecord(-1,newRec))  // (*)
        qDebug() << segModel->lastError();
    if (not segModel->submitAll())
        qDebug() << segModel->lastError();  // (*)
}
在addSegment函数中标有(*)的一行中

我在谷歌上搜索发现,当人们达到神奇的256个记录时,他们还有其他问题(显然是无关的)。似乎没有解决这个问题的办法

我做错了什么

谢谢

试着用这种方法来修复

newRec.setValue(1,QVariant(nodeFrom));

newRec.setValue(2,QVariant(nodeTo));

此错误的原因在于
void QRelation::populatedDictionary()
方法,该方法将这样一个循环
用于(int i=0;irowCount();++i)
。如果使用的数据库未报告查询大小(例如SQLite),则
rowCount()
方法将返回此值

您可以通过在使用
data(…)
setData(…)
之前填充关系模型来解决此问题。首先,您可以尝试:

setRelation(nodeFromCol, QSqlRelation("Node", "id", "name"));
QSqlTableModel *model = relationModel(nodeFromCol);
while(model->canFetchMore())
    model->fetchMore();
setRelation(nodeFromCol, QSqlRelation("Node", "id", "name"));
QSqlTableModel *model = relationModel(nodeFromCol);
while(model->canFetchMore())
    model->fetchMore();