C++ QTableView不显示任何单元格数据
我一直在使用C++ QTableView不显示任何单元格数据,c++,qt,qt5,qtableview,qsqltablemodel,C++,Qt,Qt5,Qtableview,Qsqltablemodel,我一直在使用QTableView和QSqlTableModel。运行程序时,我在QTableView上看不到填充的结果。以下是迄今为止的代码: 主窗口 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QSqlDatabase> #include <QDebug> #include <QSqlError> #include <QTime>
QTableView
和QSqlTableModel
。运行程序时,我在QTableView
上看不到填充的结果。以下是迄今为止的代码:
主窗口
#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
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括
#包括
#包括
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
void initDB();
专用Q_插槽:
void updateResults();
私人:
Ui::MainWindow*Ui;
QStringList qslHeaders;
QSqlTableModel*tableModel;
QSQL数据库;
};
#endif//main窗口
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);
}
#包括“mainwindow.h”
#包括“ui_main window.h”
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
连接(ui->btnSubmit,信号(点击(bool)),这个,插槽(updateResults());
initDB();
}
void主窗口::updateResults()
{
QString itemToSearch=ui->lineEditQuery->text();
if(itemToSearch.trimmed().isEmpty())返回;
tableModel->setFilter(“类似于''+itemToSearch+“%”的项目);
QTime start=QTime::currentTime();
tableModel->select();
int-diff;
diff=start.appeased()-QTime::currentTime().appeased();
qDebug()rowCount())isEmpty或isEmpty()?您的数据库有多少数据?@eyllansc它是isEmpty(),我复制错了。该数据库有一个名为“metadata”的表,其中有大约200000个条目。您可以打印该表,返回select()
,因为如果执行正确,则返回true,否则返回false。@eyllanesc我在select()
上添加了一个布尔标志,调试时返回true
。:(isEmpty或isEmpty()?您的数据库有多少数据?@eyllanesc it's isEmpty(),我复制错了。数据库有一个名为“metadata”的表大约有200000个条目。您可以打印返回您的select()
,因为如果执行正确,则返回true,否则返回false。@eyllanesc我在select()
上添加了一个布尔标志,调试时返回true
:(