C++ Qt:在QabStretctTableModel中插入/删除行时,仅更新QTableView中已更改的行
当我插入和删除我的C++ Qt:在QabStretctTableModel中插入/删除行时,仅更新QTableView中已更改的行,c++,qt,C++,Qt,当我插入和删除我的TableModel(QAbstractTableModel继承)的行时,我试图仅对我的QTableView中更新的行执行部分更新 当我执行插入时,我调用重写的insertRows(row,count,QModelIndex()),它附加到beginInsertRows(parent,row,row+count-1)中的数据结构中。和endInsertRows() 该表在添加和删除期间保持最新,但它看起来像是由beginInsertRows(..)和endInsertRows(
TableModel
(QAbstractTableModel
继承)的行时,我试图仅对我的QTableView
中更新的行执行部分更新
当我执行插入时,我调用重写的insertRows(row,count,QModelIndex())
,它附加到beginInsertRows(parent,row,row+count-1)中的数据结构中。
和endInsertRows()
该表在添加和删除期间保持最新,但它看起来像是由beginInsertRows(..)
和endInsertRows()发出的信号,告诉视图更新整个表。我的TableModel::data()
中的print语句显示我的表的所有单元格都在刷新
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);
}
bool TableModel::insertRows(int行、int计数、常量QModelIndex&parent)
{
如果(row>=0&&row您是对的,您必须在您的案例中使用beginInsertRows()
和endInsertRows()
。您是否检查了调用哪个数据()
(例如Qt::DisplayRole
,Qt::SizeHintRole
,…)?是的,我正在筛选除display role之外的所有角色。您所说的“筛选”是什么意思?我在询问调用被重写的data()
方法的角色。也许可以尝试在data()中放入qDebug()
语句来打印角色
要识别它们…在我的数据方法中,我有一个条件,用于查找显示角色。如果且仅当该角色是显示角色,我将返回相应的单元格值。如果角色是其他角色,我将返回一个空QVariant()。因此,我正在“筛选出”除了display角色之外的所有角色。我之所以知道正在访问哪些单元格,是因为我在条件中使用了qDebug()来打印当前正在访问的行和列,所以我确定它们是DisplayRole。