Qt:在QAbstractTableModel中插入/删除行时,仅更新QTableView中已更改的行

时间:2019-01-01 22:08:50

标签: c++ qt

当我插入和删除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*函数。

0 个答案:

没有答案