Я наконец понял, достаточно ли этого.
Я не решил, почему не переопределение QStyledItemDelegate.paint()
имеет эффект, отличный от переопределения, например:
def paint(self, painter, option, index):
QStyledItemDelegate.paint(self, painter, option, index)
но это все равно не было частью моего вопроса.
То, что я действительно решил, - как получить нативный внешний вид при рисовании вручную. Ранее при рисовании предмета я использовал:
QApplication.style().drawControl(QStyle.CE_ItemViewItem, option, painter)
, в которой возникла проблема не рисовать родной фокус или выделение. Я посмотрел на сигнатуру метода QApplication.style().drawControl()
:
void QStyle::drawControl ( ControlElement element, const QStyleOption * option,
QPainter * painter, const QWidget * widget = 0 )
и заметил параметр widget
, и попытался передать QTreeView
. Это сработало. Неважно, что QTreeView
передано, но это делает представление визуализированным изначально.
Итак, в итоге рендеринг нативного QTableView
так же прост, как и вызов:
QApplication.style().drawControl(QStyle.CE_ItemViewItem, option, painter, QTreeView())
в методе QStyledItemDelegate
.