2011-06-14 38 views
0

我試圖創建一個委託在圖標模式下將自定義小部件繪製爲列表視圖中的元素。我有或多或少的工作,但我不能讓小部件繪製在正確的地方,似乎他們正在考慮(0,0)主窗口的原點而不是列表視圖的來源。我需要通過什麼來在正確的位置呈現小部件?我知道我可以通過一個偏移量...我如何計算主窗口和列表視圖之間的偏移量?qwidget.render在QStyledItemDelegate中繪製偏移量

這是我委託我的繪製方法(從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

回答

1

如果這是別人我會後我的解決方案是有用的。 ..

我不知道這是否是最好的方式,但我通過將父母的orgin映射到主窗口來計算偏移量:

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

它的作品,所以我會用它,直到我找到一個更好的方式來做到這一點。

1

您可以將您的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)