Under what circumstances is it necessary to reimplement mapToSource and mapFromSource in QSortFilterProxyModel?

In my specific case, I've reimplement filterAcceptsRow, and when filtering is in effect, my view shows the correct number of rows, but always shows the first "n" rows from my source model. In other words, if the filter matches three rows, instead of the three filtered rows, I get the first three rows from the source. There's nothing in the docs (that I've seen) that indicate that I need to reimplement the mapping, and it certainly seems like the QSortFilterProxyModel should be able to map for me in this case.

I've been over this for a couple of hours this afternoon, and whatever I'm doing wrong, I'm just not seeing it.