我有一个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中缺少什么?