我终于想通了。
我没有解决的是为什么不覆盖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
's 的绘制方法中。