使用QT制作学生管理系统时,执行刷新或修改tableview后,tableview会变空白,控制台会输出
QSqlQuery::prepare: database not open
QSqlQuery::exec: database not open
但是刚进入界面时tableview有内容
贴上代码,还请各位帮忙解决
#ifndef INFOWINDOW_H
#define INFOWINDOW_H
#include <QWidget>
#include <QDebug>
#include <QString>
#include <QMessageBox>
#include "mydatabase.h"
#include "addstudent.h"
#include "deletestu.h"
namespace Ui {
class infowindow;
}
class infowindow : public QWidget
{
Q_OBJECT
public:
explicit infowindow(QWidget *parent = nullptr);
~infowindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_3_clicked();
void on_pushButton_2_clicked();
void on_pushButton_4_clicked();
private:
Ui::infowindow *ui;
addstudent *a = new addstudent();
deletestu *d = new deletestu();
QSqlDatabase& db_info = Mydatabase::getDatabase();
QSqlTableModel *m = new QSqlTableModel(this);
};
#endif // INFOWINDOW_H
//此节目头文件
#include "infowindow.h"
#include "ui_infowindow.h"
infowindow::infowindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::infowindow)
{
ui->setupUi(this);
if(!db_info.open())
{
qDebug()<<"error";
}
m = new QSqlTableModel;
m->setTable("base_infomation");
m->select();
ui->tableView->setModel(m);
}
infowindow::~infowindow()
{
db_info.close();
delete ui;
delete a;
delete d;
}
void infowindow::on_pushButton_clicked()
{
a->show();
}
void infowindow::on_pushButton_3_clicked()
{
m->select();
ui->tableView->setModel(m);
}
void infowindow::on_pushButton_2_clicked()
{
d->show();
}
void infowindow::on_pushButton_4_clicked()
{
QString search_name = ui->searchline->text();
m->setFilter(search_name);
m->select();
ui->tableView->setModel(m);
}
//此界面代码实现
QSqlDatabase& Mydatabase::getDatabase()
{
if(!db.isValid())
{
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("students");
db.setUserName("root");
db.setPassword("PASSWORD");
}
return db;
}
//mydatabse类的实现