刷新QListView无法正常工作

时间:2014-06-03 01:46:08

标签: c++ qt qlistview qtsql qsqltablemodel

需要一些帮助才能找到我的QListView无法刷新的原因。

我使用QListViewQSqlTableModel。我在以下函数中实现了该模型。我把这个功能叫做班级'构造

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,但他们似乎并没有做太多。

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

1 个答案:

答案 0 :(得分:0)

添加或删除某些行时,无需同时调用layoutChangeddataChanged。它们不是为这种更新而设计的。查看documentation

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