需要一些帮助才能找到我的QListView
无法刷新的原因。
我使用QListView
和QSqlTableModel
。我在以下函数中实现了该模型。我把这个功能叫做班级'构造
void myclass::refresh()
{
model_path = new QSqlTableModel(this);
model_path->setTable("mytable");
model_path->setEditStrategy(QSqlTableModel::OnManualSubmit);
model_path->select();
ui->listView_path->setModel(model_path);
ui->listView_path->setModelColumn(1);
}
以下函数将添加一行,qlistView
刷新没有任何问题。
void myclass::on_pushButton_add_clicked()
{
QSqlRecord rec (model_path->record());
rec.setValue(1,ui->lineEdit->text());
rec.setValue(2,2);
model_path->insertRecord(-1, rec);
emit model_path->layoutChanged();
}
以下函数将根据QListView
中突出显示的行删除行。删除工作在.submitAll
完成后从数据库中删除行。但是QListView
不会一致更新。
void myclass::on_pushButton_remove_clicked()
{
model_path->removeRow(ui->listView_path->currentIndex().row());
emit model_path->dataChanged(ui->listView_path->currentIndex(),ui->listView_path->currentIndex());
emit model_path->layoutChanged();
}
如果删除一行,则列表不会刷新。如果我添加一个或多个新行,然后删除其中一个或全部,则会刷新它们。正如您所看到的,我同时使用了dataChanged
和layoutChanged
,但他们似乎并没有做太多。
我不明白为什么刷新不一致。有人可以帮忙吗?
答案 0 :(得分:0)
添加或删除某些行时,无需同时调用layoutChanged
或dataChanged
。它们不是为这种更新而设计的。查看documentation
可能,您的问题在于理解编辑策略QSqlTableModel::OnManualSubmit
。尝试将其更改为QSqlTableModel::OnFieldChange