c++/Qt:如何在MainWindow类中获得对数据库的引用

c++/Qt: How to get a reference to database in the MainWindow class?

本文关键字:数据库 引用 MainWindow Qt c++      更新时间:2023-10-16

在Qt创建者中,我在一个名为databaseManager的类中创建了SQLite数据库,如下所示:

QString DatabaseManager::open_db()
{
    QSqlDatabase db;
    QString path = "/Users/me/Documents/workspace/Muasaa/";
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(path+"Database v.1");
    if (db.open()){
        return "Database is created, open, and ready ...";
    } else {
        return db.lastError().text();
    }
}

然后我在MainWindow类的头文件中定义以下内容:

Public:
   DatabaseManager *db_manager;

在源文件中,我如下调用它:

db_manager->open_db();

其创建并打开数据库。

不过,我希望使用对同一数据库的引用,以便在MainWindow源文件中的许多函数中使用它。我怎么能那样做?!

QSqlDatabase db变量移动到类头中,并添加一个获取它的方法。只要创建databaseManager类的实例并在MainWindow中维护指向它的指针,就可以检索它。

QSqlDatabase::database()是一个返回QSqlDatabase的静态函数。如果您有多个数据库,则必须在addDatabase()和database()中提供连接名称

也许设计解决方案会有所帮助?

无论您的目标是什么,都可以考虑将DatabaseManager类变成Singleton。通过这种方式,您将能够在所有gui类中使用您的管理器。类似DatabaseManager::instance()->your_method()

优点:

  • 您确信连接以正确的方式管理

  • 较少的机会构建问题

顺便说一句,我不确定,但你的程序崩溃可能是因为在初始化db_manager指针之前,在插槽中使用了它,或者(更有可能)是内部连接错误。您是否在尽可能少的示例中检查了相同的连接属性?