私はついにそれを十分に理解しました。
私が解決しなかったのは、オーバーライドしない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
ペイント方法で。