[Interest] Why are QAbstractProxyModel::mapToSource and mapFromSource public?
jkt at flaska.net
Wed Dec 11 18:30:36 CET 2013
On Wednesday, 11 December 2013 17:36:36 CEST, Philipp Kursawe wrote:
> In code that would be a loop over pX->sourceModel while the sourceModel
> a QAbstractProxyModel.
That's very similar to what I do in my code, too -- just loop as long as
the qobject_cast<QAbstractProxyModel*>(translated.model()) is not a
nullptr. It's also he right thing to do, IMHO. Each proxy model only cares
about its own business. The fact that its source model also happens to be a
proxy is not important from the first proxy's point of view.
> I just wonder why the index mapping was made public API in the first
For a real-world example, I've checked Trojita's source code and it indeed
seems that most of calls to mapFromSource are done only in context of the
proxy model itself.
However, the situation is very different with mapToSource. Some operations
which the code performs cannot be easily expressed via the traditional MVC
API, so there are custom "modifier" methods which accept a QModelIndex
instance. This code asserts to make sure that if a valid index is passed,
it must belong to this model. This in turn means that something has to
convert the proxy indexes all the way back to the original index. Given
that this code very likely runs in the scope of the GUI, it makes sense to
just call some utility function which then needs the mapToSource, and
therefore that cannot be a private method.
Hope this helps,
Trojitá, a fast Qt IMAP e-mail client -- http://trojita.flaska.net/
More information about the Interest