在QStyledItemDelegate中偏移的qwidget.render绘图

|| 我正在尝试创建一个委托,以将自定义窗口小部件绘制为图标模式下列表视图中的元素。我或多或少都在工作,但是我无法在正确的位置绘制小部件,似乎是在考虑(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     
已邀请:
        如果这对其他人有用,我将发布解决方案... 我不知道这是否是最好的方法,但是我正在通过将父代的原图映射到主窗口来计算偏移量:
offset = self._parent.mapTo(self._mainWindow, QPoint(0,0))
myWidget.render(painter, option.rect.topLeft() + offset)
它可以正常工作,因此在找到更好的方法之前,我将继续使用它。     
        您可以将Widget渲染为临时像素图,然后绘制像素图。这就解决了轮班问题:
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 )
    

要回复问题请先登录注册