2012-08-02 123 views
0

我正在使用PyQt4的节点编辑和已经得到的QGraphicsView的基础知识和的QGraphicsItem整理但我有透明度的麻烦。透明度QGraphicsRectItem.paint留下足迹当项目被移动

我的代码如下,它看起来类似于我找到的样本,但是当我移动节点时,根据链接的图像,路径被留下。

我错过了一些需要设置的标志或某种更新调用的地方?

Link to example of output

def paint(self, painter, option, widget=None): 

    painter.setPen(Node.shadow_color) 
    painter.setBrush(Node.shadow_color) 
    painter.setOpacity(0.3) 
    shadow_rect = self.rect() 
    shadow_rect.translate(Node.shadow_offset, Node.shadow_offset) 
    painter.drawRoundedRect(shadow_rect, Node.corner_radius, Node.corner_radius) 

    if self.check_state(Node.SELECTED): 
     painter.setPen(Node.outline_selected_colour) 
     painter.setBrush(Node.background_selected_colour) 
    else: 
     painter.setPen(Node.outline_colour) 
     painter.setBrush(Node.background_colour) 

    if self.check_state(Node.HOVER): 
     painter.setPen(Node.outline_hover_colour) 
     painter.setBrush(Node.background_hover_colour) 

    painter.setOpacity(1.0) 
    painter.drawRoundedRect(self.rect(), Node.corner_radius, Node.corner_radius) 

回答

0

发生了什么事是的QGraphicsView正在更新的,只有你节点的区域查阅QRect定义的边界区域。

当你从前一个位置拖动节点时,你的阴影实际上是绘制在项目的边界矩形之外(由QGraphicsRectItem.rect()定义),因此视图不会重绘该空间 - 这就是为什么你看到了踪迹。

你可以尝试QGraphicsView.viewportUpdateMode设定成类似FullViewportUpdate,看看它是否解决您的问题(寿它会导致性能下降),但我建议你治疗你的节点的矩形作为边界绘图区域 - 和抵消节点的实际大小及其在该空间内绘制的阴影,与在该空间外绘制边界和阴影。

我有一个节点部件,如果你想看到(或使用),它作为PyQt的扩展的开源ProjexUI库的一部分。它在发现:

http://dev.projexsoftware.com/projects/projexui

类是projexui.widgets.xnodewidget,我用它了很多不同的东西,但航天飞机的应用程序,例如使用它。