c++/Qt:如何在MainWindow类中获得对数据库的引用
c++/Qt: How to get a reference to database in the MainWindow class?
在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指针之前,在插槽中使用了它,或者(更有可能)是内部连接错误。您是否在尽可能少的示例中检查了相同的连接属性?
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 查询SQLite数据库中的日期
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 如何在主函数中连接到数据库,然后从其他函数引用它
- c++/Qt:如何在MainWindow类中获得对数据库的引用
- 使用数据库模型(键)来引用运行时对象,是好是坏