I am a bit confused on the mixup of QModelIndex::internalPointer() and data().

Those have entirely orthogonal use cases.

The internal pointer is an option for the model to store an internal reference in an index it hands out to a caller, so to later retrieve it if the caller wants something done with that index.

data(), on the other hand, hands out data that the model has access to.

Cheers,
_