QTableView不显示任何单元格数据

时间:2017-06-02 05:37:38

标签: c++ qt qt5 qtableview qsqltablemodel

我一直在使用QTableViewQSqlTableModel。运行该程序时,我在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

0 个答案:

没有答案