//下面这段代码,要用m_model->submitAll()才能保存,用m_model->submit()不能保存到数据库。请问是哪里出了问题?
const int currentrow = tableview->currentIndex().row();//所在的行号
if(currentrow >= 0)
{
QFont font = QFont("Microsoft YaHei",12,2);
ui->textEdit_pingzhu->setFont(font);
ui->textEdit_pingzhu->setAlignment(Qt::AlignJustify);
m_model->setData(m_model->index(currentrow,7),ui->textEdit_pingzhu->toPlainText());
m_model->submitAll();
//m_model->submit();
//重新选择该行,要刷新fetch()到该行,才能定位到此行。
while (m_model->rowCount() < currentrow) {
m_model->fetchMore();
}
tableview->setSelectionBehavior(QAbstractItemView::SelectRows);
tableview->setCurrentIndex(tableview->model()->index(currentrow,0));
return;
}
else{
;//省略
}
可参考 https://blog.csdn.net/luolaihua2018/article/details/111801252 中submit和submitall的函数解释
看起来你的代码基本上是正确的,m_model->submitAll() 是用于提交所有待保存的更改到数据库的操作。然而,m_model->submit() 通常只提交当前挂起的更改,而不是所有的更改。所以,如果你使用了 m_model->setData 多次,或者对多行数据进行了修改,最好使用 m_model->submitAll() 来确保所有的更改都被提交到数据库
问题分析:
1、submit函数用于提交当前处于编辑状态的记录的更改。如修改的某条记录,某个字段值等。
2、submitAll函数则用于提交所有处于编辑状态的记录的更改。如对多条记录进行了修改,则将所有的修改保存到数据库中。
【相关推荐】
为了确保数据的表示与其访问方式保持分离,引入了模型索引的概念。可以通过模型获得的每条信息都由模型索引表示。视图和委托使用这些索引来请求要显示的数据项。
模型索引对象包含一个指向创建它们的模型的指针,这可以防止在处理多个模型时出现混淆。
QAbstractItemModel *model = index.model();
模型索引提供对数据片段的临时引用,可用于通过模型检索或修改数据。 由于模型可能会不时重新组织其内部结构,因此模型索引可能会失效,不应存储。
如果需要对一条信息进行长期引用,则必须创建一个持久模型索引。这提供了对模型保持最新的信息的参考。
临时模型索引由 QModelIndex 类提供,持久模型索引由 QPersistentModelIndex 类提供。
要获得与数据项对应的模型索引,必须为模型指定三个属性:行号、列号、父项的模型索引。