Qt QSqlTableModel正在插入新记录,获取的数据为QVariant(无效)

Qt QSqlTableModel正在插入新记录,获取的数据为QVariant(无效),qt,qvariant,qsqltablemodel,Qt,Qvariant,Qsqltablemodel,我有一个简单的QSqlTableModel: class UsersModel : public QSqlTableModel { Q_OBJECT public: UsersModel(); ~UsersModel(); bool newUser(const QString &name, const QString &surname, const QString &birthday); }; UsersModel::UsersMode

我有一个简单的QSqlTableModel:

class UsersModel : public QSqlTableModel
{
    Q_OBJECT
public:
    UsersModel();
    ~UsersModel();

    bool newUser(const QString &name, const QString &surname, const QString &birthday);
};

UsersModel::UsersModel()
{
    setTable("users");
    select();
}
在将新记录插入模型时,会将其插入数据库,但立即从模型检索此记录不起作用:

bool UsersModel::newUser(const QString &name, const QString &surname, const QString &birthday)
{
    QSqlRecord rec = record();
    rec.setGenerated("id", true);
    rec.setValue("name", QVariant(name));
    rec.setValue("surname", QVariant(surname));
    rec.setValue("birthday", QVariant(birthday));

    bool res = insertRecord(-1, rec);
    if (res) {
        qDebug() << "last inserted id:" << query().lastInsertId();
        qDebug() << "name: " << record(rowCount() - 1).value("name");
    }

    return res;
}
newUser方法调用的结果:

最后插入的id:QVariantqlonglong,31 名称:QVariantInvalid

如果我查看数据库,就会插入记录,但是如果我试图从模型中获取它,就会返回无效的QVariant。
我做错了什么?模型不应该返回新插入记录的数据吗?

模型的编辑策略是什么?尝试将其设置为QSqlTableModel::OnFieldChange并检查结果。是否假设query.lastInsertId与rowCount-1相同?事实并非总是如此。@PavelStrakhov根据docs:QSqlRecord QSqlQueryModel::record int row const返回包含当前查询字段信息的记录。如果行是有效行的索引,则记录将填充该行的值。-我假设插入的记录是模型中的最后一条记录,因此rowCount-1应该是最后一行的索引。-可能是错误的假设,但是根据DOC插入记录1,ReC应该在模型中附加行。新的条目可能会出现在表的中间,这取决于模型的排序设置。@ PavelStrakhov Hmm.。OK,但是RealDeordRooStudio1.ValueNeNm应该从模型返回最后一条记录,不管该记录的id是什么。模型负责在rowCount方法中返回正确的行数。