Qwidget.Render drawing QSTyLedItemDelegateのオフセット付き
質問
アイコンモードのListViewで要素としてカスタムウィジェットを描画するためのデリゲートを作成しようとしています。多かれ少なかれ機能していますが、ウィジェットを適切な場所に描くことができません。リストビューの原点ではなく、メインウィンドウの起源を考慮して描画されているようです。適切な場所でウィジェットをレンダリングするために何を渡す必要がありますか?オフセットに合格できることは知っています...メインウィンドウとListViewの間のオフセットを計算するにはどうすればよいですか?
これは私のデリゲートの私のペイント方法です(qstyleditemdelegateから派生)
def paint(self, painter, option, index):
painter.save()
if option.state & QStyle.State_Selected:
painter.fillRect(option.rect, option.palette.highlight());
model = index.model()
myWidget = model.listdata[index.row()]
myWidget.setGeometry(option.rect)
myWidget.render(painter, option.rect.topLeft() )
painter.restore()
ありがとう
/j
解決
これが他の誰かに役立つ場合に備えて、私は私の解決策を投稿します...
これがそれを行う最良の方法であるかどうかはわかりませんが、親のOrginをメインウィンドウにマッピングすることでオフセットを計算しています。
offset = self._parent.mapTo(self._mainWindow, QPoint(0,0))
myWidget.render(painter, option.rect.topLeft() + offset)
動作するので、これを行うためのより良い方法が見つかるまで使用します。
他のヒント
ウィジェットを一時的なPIXMAPにレンダリングしてから、代わりにPIXMAPを描画できます。それはシフトの問題を解決します:
def paint(self, painter, option, index):
pic = QPixmap( option.rect.width(), option.rect.height() )
w = ItemWidget()
w.setGeometry( option.rect )
w.render(pic)
painter.drawPixmap( option.rect, pic )
所属していません StackOverflow