我一直在使用QTableView
和QSqlTableModel
。运行该程序时,我在QTableView
上看不到填充的结果。这是迄今为止的代码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QTime>
#include <QSqlTableModel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void initDB();
private Q_SLOTS:
void updateResults();
private:
Ui::MainWindow *ui;
QStringList qslHeaders;
QSqlTableModel *tableModel;
QSqlDatabase database;
};
#endif // MAINWINDOW_H
MainWindow.cpp看起来像这样:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->btnSubmit, SIGNAL(clicked(bool)), this, SLOT(updateResults()));
initDB();
}
void MainWindow::updateResults()
{
QString itemToSearch = ui->lineEditQuery->text();
if(itemToSearch.trimmed().isEmpty()) return;
tableModel->setFilter("item like '"+ itemToSearch +"%'");
QTime start = QTime::currentTime();
tableModel->select();
int diff;
diff = start.elapsed() - QTime::currentTime().elapsed();
qDebug() << QString("TableView load time for %1 records: ").arg(tableModel->rowCount()) << QString::number(diff/1000.0, 'g', 6) << " seconds";
}
void MainWindow::initDB()
{
QString path = "C:\\Users\\sqlite_dbs\\ENTRIES.db";
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName(path);
if (!database.open())
{
qDebug() << "Error: connection with database fail";
}
else
{
qDebug() << "Database: connection ok";
}
tableModel = new QSqlTableModel(this, database);
tableModel->setTable("metadata");
ui->tableViewSearchResults->setModel(tableModel);
}
当用户在lineEditQuery
中输入搜索字符串并单击“提交”按钮时,它应该使用表格数据填充视图。但是,除标题数据外,我在QTableView
上看不到任何更改。标题似乎被正确加载为SQL表中的列。
此外,qDebug()
会打印以下内容:
数据库:连接好了 &#34; TableView加载时间为256条记录:&#34; &#34; 0.063&#34;秒
这表明该模型确实携带数据。
编辑#1:我检查了boolean
返回的select()
值,似乎返回true
。