QSqlTableModel - 将数据插入模型的方法是什么?

时间:2016-07-25 19:15:24

标签: qt model-view-controller qsqltablemodel

我试图将一些数据插入QSqlTableModel几个小时,遗憾的是没有任何成功。 在使用QSqlTableModel::insertRow()QSqlTableModel::setData()函数无效尝试后,我在 Qt论坛 中找到了以下代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("default.sqlite");

if(!db.open()) {
    qDebug() << db.lastError().text();
}

QSqlQuery q(db);
if(!q.exec("create table if not exists 'table' (id integer)")) {
    qDebug() << "Create table" << q.lastError().text();
}

QSqlTableModel model(this, db);
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.setTable("table");
model.select();

model.database().transaction();

int rowCount = model.rowCount();
qDebug() << rowCount;
if(!model.insertRows(rowCount, 4)) {
    qDebug() << "insertRows" << model.lastError().text();
}

model.setData(model.index(rowCount + 0,0), rowCount +0);
model.setData(model.index(rowCount + 1,0), rowCount +1);
model.setData(model.index(rowCount + 2,0), rowCount +2);
model.setData(model.index(rowCount + 3,0), rowCount +3);

rowCount = model.rowCount();
if(!model.insertRow(rowCount)) {
    qDebug() << "insertRow" << model.lastError().text();
}
model.setData(model.index(rowCount,0), rowCount);

if(model.submitAll()) {
    model.database().commit();
} else {
    model.database().rollback();
            qDebug() << "Database Write Error" <<
                 "The database reported an error: " <<
                   model.lastError().text();

}

ui->tableView->setModel(&model);

尽管如此,也没有效果。当然数据库已正确创建,没有qDebug个信息,但没有数据添加到表中。我还将我的模型连接到QTableView以查看任何结果,但没有任何更改(仅显示空视图)。

我很困惑,因为我不知道我做错了什么。有人可以解释如何正确地将数据插入QSqlTableModel吗?

我也尝试使用QSqlTableModel::insertRecord()

QSqlRecord r = model.record();
QSqlField field("id", QVariant::Int);
r.append(field);

model.insertRecord(0, r);

但也没有效果。

0 个答案:

没有答案