QT表模型示例
Qt Table Model Example
我正在看qt示例"表模型示例"
在该示例中,连接的createConnection()方法。h包含以下代码:
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open()) {...
我在代码中重复了此示例。我不明白这2件事。
局部变量db在createConnection()函数末尾被破坏(请参见RAII)。由于我的数据库不需要初始化,也不使用" DB"变量,因此我看不出为什么需要此代码。但是,如果删除它,我的程序将无法从现有数据库中读取。我希望DB的破坏将关闭数据库并使其无法使用。但是,由于我不触摸数据库变量,为什么需要创建它,然后在访问数据库之前被销毁?由于我在任何地方都不使用DB变量,并且在调用代码之前被破坏了,因此我看不出为什么我需要调用createConnection()函数。另一方面,我看不到如何打开数据库并导致可变破坏具有例外安全RAII代码。
我永远不会让db.open()失败。如果我没有数据库,它会创建它,然后打开一个空白。如果我确实有数据库,它将打开它。我有一个数据库,如果出于任何原因无法打开,我不想创建它,我想要一个错误,因为某些事情是严重的错误。打开空白数据库只对我来说是麻烦。我该如何处理这种情况?
我是QT的新手,但在C 方面非常有经验。这个代码对我来说毫无意义。我希望DB变量的寿命是开放数据库的寿命。如示例中所述,我看不到该代码没有资源泄漏。据我所知,初始化DB可以打开某种全球资源,即使在DB变量被破坏导致泄漏后,它也可以保持打开状态。
这很令人困惑。
thx。
h os tile
这只是一个小例子。
-
QSqlDatabase::addDatabase("QSQLITE");
将创建默认连接,任何后续查询都不会明确命名另一个连接。范围范围内将不会破坏连接。在此示例中,createConnection()
将用于初始化inmemory数据库。该连接可以在以后使用QSqlDatabase::database()
检索。在标准应用中,一个人可能会将QSqlDatabase db
作为类成员保持。 -
使用Inmemory DB仅创建一个空的DB,就像用于基于SQLite-File的DB一样。如果要检查现有文件(db),请使用
QFile::exists(QString path)
。
如果要打开许多数据库(QSqlDatabase::addDatabase("QSQLITE","anotherConnectionName");
上使用不同的连接名称,您将有泄漏。否则,您只是在覆盖默认数据库连接。Qapplication本身将保持连接。可以使用QSqlDatabase::removeDatabase()
;
QSqlDatabase
是一个相当奇怪的类。阅读其文档。连接持续存在,QSqlDatabase
是它的手柄。命名连接,addDatabase
返回具有给定名称的连接,如果不存在,则可以选择创建它。您可以拥有任何数量的QSqlDatabase
对象表示一个连接。
由于SQLITE内存数据库是特定于您的流程的,因此在您要求时不创建它几乎没有意义。您提前创建它的唯一方法是从您的过程中直接使用SQLite API。这些数据库不持续。这里的行为非常明智。
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何在Qt中合并/追加/添加两个用于线程的模型?
- Qt创建者-如何删除Clang代码模型
- 将C++数据模型与Qt SCXML状态机一起使用
- 在QT C++编辑Qtable模型数据时,我需要得到一个小盒子,我需要显示编辑文本,这怎么可能?
- Qt - 为什么 QTableView 会丢失其模型()
- QT QML - 从另一个类访问 qml 模型
- Qt 模型拖放 - 无法保存类型 QJsonValue
- 模型对话框移动到主窗口后面的Qt错误
- Qt ListView 不显示C++模型内容
- Qt中数据类(模型)和视图/控制器类之间的数据通信的正确方式是什么
- Qt:从视图中删除模型
- QT TreeView问题与排序模型一起使用
- QT setCurrentIndex不会发出用于无效的模型Inderex的CurrentChange
- Qt:模型/视图框架上的数据转换
- QT表模型示例
- QTreeView模型的Qt-itemChanged信号仅适用于一级项目
- Qt自定义树模型显示正确,但有缺陷且速度慢
- 具有两种不同视图的Qt数据模型
- 标准项目模型 Qt.