在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 )
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...