【问题标题】:QTableView not showing all of the data from an SQLite databaseQTableView 未显示 SQLite 数据库中的所有数据
【发布时间】:2018-10-15 08:32:38
【问题描述】:

我有一个带有QTableViewQLineEdit 的简单应用程序,我正在使用QSqlQueryModelQSortFilterProxyModel 从SQLite3 数据库中的表中获取数据并过滤结果(使用setFilterFixedString(the text from the QLineEdit) )。数据库中的表有 8611 行大。

第一次加载时,tableview 似乎没有显示数据库中的所有行。当我将字符串应用于过滤器(在 QLineEdit 上放置一些文本)时,并非所有预期结果都显示出来;我必须从 QLineEdit 中删除文本并向下滚动到 tableview 的末尾(它从数据库更新?!)然后问题就消失了:我的所有结果都来自数据库。

这是 QTableView 的已知错误吗?如何解决这个问题?

谢谢。

P.S:这是我的应用程序中关于这个问题的基本部分。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QtSql>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_searchEdit_textChanged(const QString &arg1);

private:
    Ui::MainWindow *ui;
    QSqlQueryModel *model;
    QSortFilterProxyModel *proxyModel;
};

#endif // MAINWINDOW_H

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("dpm.db");
    if (!db.open()) { }
    model = new QSqlQueryModel(this);
    model->setQuery(QString("SELECT specialite as Spécialité, dci as DCI FROM medocs"), db);
    proxyModel = new QSortFilterProxyModel(this);
    proxyModel->setSourceModel(model);
    proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
    ui->listeTable->setModel(proxyModel);
    ui->listeTable->show();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_searchEdit_textChanged(const QString &medoc)
{
    proxyModel->setFilterFixedString(medoc);
}

【问题讨论】:

    标签: qt sqlite qtableview qsortfilterproxymodel qsqlquerymodel


    【解决方案1】:

    事实证明,Qt 的 SQLite 驱动程序以 256 行的步长将行插入模型中。我必须使用fetchMore() 获取所有结果。

    while(model->canFetchMore()) model->fetchMore();
    

    请参阅 Herehere

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 2018-07-30
      • 2014-07-08
      • 2015-05-25
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多