0

アイコンモードのリストビューでカスタムウィジェットを要素として描画するためのデリゲートを作成しようとしています。多かれ少なかれ機能していますが、ウィジェットを適切な場所に描画できません。リストビューの原点ではなく、メインウィンドウの原点(0,0)を考慮して描画されているようです。ウィジェットを適切な場所にレンダリングするには、何を渡す必要がありますか?オフセットを渡すことができることはわかっています...メインウィンドウとリストビューの間のオフセットを計算するにはどうすればよいですか?

これは私のデリゲートのペイントメソッドです(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

4

2 に答える 2

1

これが他の誰かに役立つ場合は、私の解決策を投稿します...

これが最善の方法かどうかはわかりませんが、親の起源をメイン ウィンドウにマッピングしてオフセットを計算しています。

offset = self._parent.mapTo(self._mainWindow, QPoint(0,0))
myWidget.render(painter, option.rect.topLeft() + offset)

これは機能するので、これを行うためのより良い方法が見つかるまで使用します。

于 2011-06-14T21:43:19.617 に答える