【发布时间】:2013-04-04 10:16:10
【问题描述】:
我在 C++ 项目中使用 Qt 库,但我有一个设计问题:应该在哪里声明数据库?我宁愿不声明全局变量。
目前我正在以这种方式处理这个问题。我有一个主窗口,我已经在其中声明了数据库,因此我在主窗口中执行查询并使用不同的信号和插槽将结果传递给对话框。
我在主窗口启动时启动数据库,并在窗口关闭时关闭它。不知道这样行不行 现在我还需要另一个类中的数据库连接,这样我就可以传递对数据库的引用或使数据库全局化
我不喜欢这些解决方案.. 有处理这种情况的标准模式吗?
编辑:
我的班级现在看起来像:
class Database
{
public:
bool open(void);
bool close(void);
static Database* getDatabase(void);
// various methods like loadThisTable(), saveThisTable() etc
private:
Database(); // disable constructor
~Database(); // disable destructor
Database(const Database&); // disable copy constructor
Database& operator=(const Database&); // disable assignment
static Database* instance_; // database instance
QSqlDatabase qtDB; // qt db database
}
如果我愿意,我可以添加添加和删除方法,但我只有一个数据库实例。
【问题讨论】:
-
请澄清您所说的数据库对象是什么意思?你不是在用 QtSql 的模型类吗?
-
ps 我已经创建了一个类数据库,其方法如下:loadThis()、loadThat(),在这个类中有 qt 数据库,所以我不直接使用 qt 数据库。如果我使用它,我知道我可以使用 QSqlDatabase::addDatabase 添加数据库,然后使用 QSqlDatabase::database 从任何地方获取它
-
@SmitPatel 我为每个物理表创建了一个新类
-
我认为对于模块化、易于阅读的代码,您的结构化方式很好。您可以在其他类中建立另一个连接。但如果你真的在考虑重用现有的连接,你应该看看shared pointer。这样您就可以在其他地方使用您的应用程序的现有连接。但这会使这项任务过于复杂。
-
我知道 shared_pointer 但我没有考虑过。我会调查一下谢谢