C++ 是否有一种习惯用法可以将数据库查询添加到Qt模型?

C++ 是否有一种习惯用法可以将数据库查询添加到Qt模型?,c++,qt,sqlite,model-view-controller,C++,Qt,Sqlite,Model View Controller,我有一个QtQabstracteModel,底层信息在一个sqlite数据库中。我希望根据需要将数据库查询中的行以增量方式添加到模型中。但是,数据库获取可能很慢。我的问题是在修改模型之前需要调用beginInsertRows(),但它需要知道将添加多少行。在我进行查询之前,我不会知道这一点。这意味着我似乎有以下选择,所有这些都没有吸引力 执行两个数据库查询:“选择COUNT(*)…”以获取结果行数,然后调用beginInsertRows(),并执行真正的查询。当然,缺点是一个潜在的昂贵查询必须执

我有一个QtQabstracteModel,底层信息在一个sqlite数据库中。我希望根据需要将数据库查询中的行以增量方式添加到模型中。但是,数据库获取可能很慢。我的问题是在修改模型之前需要调用beginInsertRows(),但它需要知道将添加多少行。在我进行查询之前,我不会知道这一点。这意味着我似乎有以下选择,所有这些都没有吸引力

  • 执行两个数据库查询:“选择COUNT(*)…”以获取结果行数,然后调用beginInsertRows(),并执行真正的查询。当然,缺点是一个潜在的昂贵查询必须执行两次

  • 执行整个查询,缓冲结果,计算行数,然后调用beginInsertRows()并将它们插入模型。缺点是所有额外的缓冲

  • 对结果集中的每一行调用一次beginInsertRows()/endInsertRows()。这将导致大量不必要的视图更新

  • 对我来说,这似乎是一个普遍的问题。有普遍的解决办法吗?例如,有没有办法告诉beginInsertRows()一件事,然后改变主意


    谢谢。

    正确的方法是实现
    qabstractemmodel::canFetchMore
    qabstractemmodel::fetchMore
    。您是否也尝试使用内置的
    QSqlQueryModel
    QSqlTableModel
    类?他们已经实现了这个行为。我正在这样做,但是当索引被扩展时,树视图似乎只调用了canFetchMore/fetchMore两次。我看到的是,如果每个fetch返回N行,则在第一次展开索引时,我的视图将显示2N行,即使结果集中还有其他行,也不会再次检查canFetchMore。这让我回到了索引第一次展开时必须获取所有行的情况,所以我又回到了同样的问题。有什么诀窍可以做到这一点吗?我没有尝试内置的SQL类,因为我使用的是一个非Qt应用程序也需要使用的内部库,所以我使用的是比原始sqlite略高一点的接口。