当我插入和删除QTableView
(继承TableModel
)的行时,我只尝试对QAbstractTableModel
中更新的行执行部分更新。
执行插入操作时,我会调用覆盖的insertRows(row, count, QModelIndex())
,它会附加到beginInsertRows(parent, row, row + count - 1)
和endInsertRows()
中的数据结构中。
在添加和删除期间,该表保持最新状态,但是看起来beginInsertRows(..)
和endInsertRows()
发出的信号告诉视图更新整个表。 TableModel::data()
中的一条打印语句显示表中的所有单元格都在刷新。
bool TableModel::insertRows(int row, int count, const QModelIndex &parent)
{
if (row >= 0 && row <= file_records.size())
{
beginInsertRows(parent, row, row + count - 1);
file_records.append(0);
endInsertRows();
return true;
}
return false;
}
// when adding record
int row = file_records.size();
if (insertRow(row))
{
file_records[row] = file_record;
}
inline bool QAbstractItemModel::insertRow(int arow, const QModelIndex &aparent)
{
return insertRows(arow, 1, aparent);
}
有没有办法告诉视图仅更新新行?
我的更新功能在受影响的索引上发出dataChanged()
,并且它仅成功更新了相关的视图数据。但是,当我进行结构更改时,似乎没有办法使用begin*
和end*
函数。