c0ld1nk 2023-07-11 23:14 采纳率: 50%
浏览 15
已结题

QT tableview问题

使用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类的实现
  • 写回答

2条回答 默认 最新

  • 大米粥哥哥 2023-07-12 09:23
    关注

    和db声明的位置有关吧..
    类似这个博客里的https://blog.csdn.net/haigear/article/details/120416960

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月20日
  • 已采纳回答 7月12日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂