When a QSFPM's source model calls "endResetModel" this internally emits the "modelReset" private signal. This is handled internally by QSFPM::_q_sourceReset() which calls _q_clearMapping() which calls update_source_sort_column() which calls create_mapping() which calls filterAcceptsRow for each row. After _q_clearMapping() returns, _q_sourceReset then calls update_source_sort_column() which then iterates over all the rows again calling filterAcceptsRow again for every row. This means that for a source model reset, filterAcceptsRow is called for each row twice. For large models, this can be very expensive.