要在 QSortFilterProxyModel 中实现双击修改时过滤数据的功能,需要在重写 data() 函数时进行处理。
以下是一个示例代码:
QVariant MyProxyModel::data(const QModelIndex &proxyIndex, int role) const
{
if (role == Qt::DisplayRole || role == Qt::EditRole)
{
// 获取源模型中对应行的索引
QModelIndex sourceIndex = mapToSource(proxyIndex);
// 获取源模型中对应行的数据
QVariant value = sourceModel()->data(sourceIndex, role);
// 如果该行被过滤掉了,则显示空值
if (!filterAcceptsRow(sourceIndex.row(), sourceIndex.parent()))
{
value = QVariant();
}
return value;
}
return QSortFilterProxyModel::data(proxyIndex, role);
}
在这个函数中,首先获取了源模型中对应行的索引和数据。然后,如果该行被过滤掉了,就将数据设置为空值。最后返回该行的数据。
通过这样的处理,当用户双击某一行进行编辑时,显示的是过滤后的数据而不是源模型的当前行数据。