QTableView 不显示来自 SQLite 数据库的所有数据



我有一个简单的应用程序,带有QTableView和QLineEdit,我正在使用QSqlQueryModel和QSortFilterProxyModel从SQLite3数据库中的表中获取数据并过滤结果(使用setFilterFixedString(来自QLineEdit的文本((。数据库中的表有 8611 行大。

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

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

谢谢。

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

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驱动程序以256行的步长将行插入到模型中。我必须使用 fetchMore(( 获取所有结果。

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

看到这里和这里。

相关内容

  • 没有找到相关文章

最新更新