QT QAbstractTableModel实现insertRows

时间:2017-03-23 21:37:52

标签: c++ qt qabstracttablemodel qsortfilterproxymodel

我有一个QAbstractTableModel的Impl,它有一个vector<Item> items表格的所有项目(每行一个项目)

int rowCount(..){ return items.size() }
QVariant data(const QModelIndex &index, int role){
   Item i = items.at(index.row()));
   switch(index.column()){
      case 0: return i.zero;
       (..)
   }
}

现在我尝试实现add_row(Item i)方法:

void add_row(Item i){

   int row = rowCount(QModelIndex())+1;
   beginInsertRows(QModelIndex(), row, row);

   items.push_back(i);

   endInsertRows();
   emit dataChanged(QModelIndex(), QModelIndex());
}

QAbstractTableModel在我的小部件中实现:

MyQSortFilterProxyModel my_filter = new MyQSortFilterProxyModel();
MyTableModel* my_model = new MyTableModel(items, this);
my_filter->setSourceModel(my_model);
ui->my_table->setModel(my_filter);

我想添加一个新的行:

my_model->add_item(item);
ui->my_table->reset();

这只有一个问题,几乎可以正常工作。该项目在正确的位置添加到我的表格并正确显示,但最后一行总是消失。 我在哪里做错了什么?为什么最后一行总是消失?!

谢谢!

更新

 void add_row(Item i){
  int row = rowCount(QModelIndex())+1;
  beginInsertRows(QModelIndex(), row, row);
  items.push_back(i);

  endInsertRows();
  emit dataChanged(createIndex(0,0), createIndex(row,5));
}

这可行,但始终返回以下错误: QSortFilterProxyModel: invalid inserted rows reported by source model 没有FilterProxyModel,一切都可以找到。我在FilterProxyModel中缺少什么?

0 个答案:

没有答案