【问题标题】:Refreshing QListView not working刷新 QListView 不起作用
【发布时间】:2014-06-03 01:46:07
【问题描述】:

需要帮助找出我的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,但它们在这里似乎没有多大作用。

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

【问题讨论】:

    标签: c++ qt qlistview qtsql qsqltablemodel


    【解决方案1】:

    当您添加或删除某些行时,您不需要同时调用layoutChangeddataChanged。它们不是为此类更新而设计的。检查documentation

    可能,您的问题在于理解编辑策略QSqlTableModel::OnManualSubmit。试试改成QSqlTableModel::OnFieldChange

    【讨论】:

    • 感谢您的回答。我同时使用layoutChangeddataChanged 只是为了表明两者都不起作用。 OnManualSubmit 也是正确的编辑策略,因为我只在最后提交更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多