QTableView это просто графический объект, который себя отрисовывает, как и все виджеты на основе QWidget.
Ему нельзя например добавить лейоут на который плместить дочерние виджеты, т.к. у него нет изначально лейаута в отличии например от QTabWidgets или QDialog.
Главное, что у него есть метод paint и он тупо себя отрисовывает.
Всегда полезно посмотреть иерархию класса QTableView:

Взаимодействие QTableView с моделью данных.
Итак надо понять как заполняется данными QTableView. Это в будущем поможет решить некоторые визульные проблемки.
Наследуем все виртуальные методы от классов предков и логгируем работу таблицы.
Выясняем, что после select(..) в модели данных у таблицы сначала очищаются строки, потом заполняются заново через функцию insertRow... Все пока довольно банально. И это очень хорошо.
Конечно модель данных взаимодействует с визуальным представлением через механизм сигнал/слот поскольку это разные ветки развития (иерархии классов).
У класса QTableView есть полезная фича - колонки можно переставлять (например через moveSection). В результате меняется visualIndex, но logicalIndex остаётся таким же. Таким образом все продолжает работать нормально до повторного вызова метода select модели данных.
Сигналов и слотов для изучения кстати немало найдено в классах предках.
Здесь на развитие класса визуального отображения таблицы PblTableView
Здесь один открытый проект для мирового сообщества: Развитие Qt Sql.