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

时间:2015-11-30 16:00:08

标签: c++ database qt sqlite qt-creator

在Qt-creator中,我在一个名为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源文件中的许多函数中使用它。我怎么能这样做?!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

无论您的目标是什么,请考虑将您的DatabaseManager类转换为Singleton。通过这种方式,您可以在所有gui课程中使用您的经理。像DatabaseManager::instance()->your_method()

这样的东西

优点:

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

  • 构建问题的机会减少

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