如何检测tableview是否被改变



我有以下想法:用户可以编辑数据库,当他按下退出数据库时,他会被问到是否要保存编辑过的数据库,或者如果他编辑了一些东西,然后把它转回来,他不会被问到。

我认为我应该比较创建的数据库和编辑后的数据库,当用户按下退出,但不知道如何。

这是我创建数据库的代码
model = new QSqlRelationalTableModel(this, *db);
model->setTable("cv");
model->setFilter("cv_id = "+currentCV+"");
model->removeColumns(0,1);
model->select();
ui->tableView->show();
ui->tableView->setModel(model);

你有两个选择

  1. 创建数据库中的事件触发器。事件触发器在用户更改数据库表结构、创建表或更改列时起作用。因此,当用户执行任何DDL命令时,这些触发器都会起作用。(修改表,添加列,创建索引,删除表等)您可以使用事件触发器将这些命令插入到日志表中。

  2. 您的数据库结构(所有表,列,索引等)都存储在information_shema中。您可以选择这些表的数据并将其保存在某个地方,然后将其与更改过的数据进行比较。

请记住,在提交用户更改之前不会执行对数据库的更改。默认情况下,在发生更改时执行sumbit,这对您没有帮助。但是,你可以设置

model.setEditStrategy(QSqlTableModel.EditStrategy.OnManualSubmit)

此时,只有在调用方法model.submitAll()时才持久化更改。

此时,您所要做的就是利用模型的dataChanged信号并使用标志变量来检查是否已操作更改:

data_changed = False
def on_data_changed()
data_changed = True
model.dataChanged.connect(on_data_changed)

现在您可以调整代码的逻辑以满足您的特定目的

相关内容

最新更新