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。