0

需要一些帮助来找出为什么我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();
 }

如果我删除一行,列表将不会刷新。如果我添加一个或多个新行,然后删除其中一个或全部,它们将被刷新。正如你所看到的,我同时使用了两者dataChangedlayoutChanged但它们在这里似乎没有多大作用。

我不明白为什么刷新不一致。任何人都可以帮忙吗?

4

1 回答 1

0

您不需要同时调用两者,也不需要在添加layoutChangeddataChanged删除某些行时调用。它们不是为此类更新而设计的。检查文档

可能,您的问题在于理解编辑策略QSqlTableModel::OnManualSubmit。尝试将其更改为QSqlTableModel::OnFieldChange

于 2014-06-03T07:48:22.030 回答