QGrapicsScene:更改QGraphicRects高度仅在第二次运行后应用

时间:2014-07-05 10:17:20

标签: qt pyside qgraphicsitem

我正在QGraphicsScene使用QGraphicRectItems编制堆积条形图。到目前为止,一切都有效,但似乎在用QGraphicsRectItems创建setRect之后改变了QGraphicsRect直线的高度,未应用高度。奇怪的是,如果我重新运行程序,高度总是变为相同的“随机”值。

如果我再次更改QGraphicsRect s的高度,使用相同的功能一切正常。在创建QGraphicsRectItems以“注册”它之后,我还需要做些什么吗?

编辑:

如果我再次改变高度,也会发生同样的情况。我需要做两次以使杆正确调整它们的高度。

代码:

在我的函数中,我使用:

更改(堆叠的)accH = 0 for i, h in enumerate(data): geo = rects[i].rect() print "before\t\t\t", geo print "target height\t\t", h geo.setHeight(h) geo.setY(accH) rects[i].setRect(geo) print "changed geometry\t", geo print "geometry of updated rect", rects[i].rect() print "___" accH += h print "-----" 的高度
rects

QGraphicsItem是以前创建的data = [ 98. 263. 6710. 0.]的列表。

使用before PySide.QtCore.QRectF(0.000000, 0.000000, 1.000000, 98.000000) target height 98.0 changed geometry PySide.QtCore.QRectF(0.000000, 0.000000, 1.000000, 98.000000) geometry of updated rect PySide.QtCore.QRectF(0.000000, 0.000000, 1.000000, 98.000000) ___ before PySide.QtCore.QRectF(0.000000, 98.000000, 1.000000, 166.000000) target height 263.0 changed geometry PySide.QtCore.QRectF(0.000000, 98.000000, 1.000000, 263.000000) geometry of updated rect PySide.QtCore.QRectF(0.000000, 98.000000, 1.000000, 263.000000) ___ before PySide.QtCore.QRectF(0.000000, 361.000000, 1.000000, 6351.000000) target height 6710.0 changed geometry PySide.QtCore.QRectF(0.000000, 361.000000, 1.000000, 6710.000000) geometry of updated rect PySide.QtCore.QRectF(0.000000, 361.000000, 1.000000, 6710.000000) ___ before PySide.QtCore.QRectF(0.000000, 7071.000000, 1.000000, -7068.000000) target height 0.0 changed geometry PySide.QtCore.QRectF(0.000000, 7071.000000, 1.000000, 0.000000) geometry of updated rect PySide.QtCore.QRectF(0.000000, 7071.000000, 1.000000, 0.000000) ___

输出上述打印报表

首先运行:

before                  PySide.QtCore.QRectF(0.000000, 0.000000, 1.000000, 98.000000)
target height           98.0
changed geometry        PySide.QtCore.QRectF(0.000000, 0.000000, 1.000000, 98.000000)
geometry of updated rect PySide.QtCore.QRectF(0.000000, 0.000000, 1.000000, 98.000000)
___
before                  PySide.QtCore.QRectF(0.000000, 98.000000, 1.000000, 263.000000)
target height           263.0
changed geometry        PySide.QtCore.QRectF(0.000000, 98.000000, 1.000000, 263.000000)
geometry of updated rect PySide.QtCore.QRectF(0.000000, 98.000000, 1.000000, 263.000000)
___
before                  PySide.QtCore.QRectF(0.000000, 361.000000, 1.000000, 6710.000000)
target height           6710.0
changed geometry        PySide.QtCore.QRectF(0.000000, 361.000000, 1.000000, 6710.000000)
geometry of updated rect PySide.QtCore.QRectF(0.000000, 361.000000, 1.000000, 6710.000000)
___
before                  PySide.QtCore.QRectF(0.000000, 7071.000000, 1.000000, 0.000000)
target height           0.0
changed geometry        PySide.QtCore.QRectF(0.000000, 7071.000000, 1.000000, 0.000000)
geometry of updated rect PySide.QtCore.QRectF(0.000000, 7071.000000, 1.000000, 0.000000)
___

第二轮:

QGraphicsRectItem

我刚刚实现的目的是让这个输出为stackoverflow做好准备,问题似乎是每个height的高度是正确的y value - 它的setY。我现在尝试先在上面的setHeightgeo然后QGraphicsRects。然后打印表明QGraphicsView的几何(rect)是正确的。但在{{1}}我没有看到任何变化。

1 个答案:

答案 0 :(得分:0)

我最终找到了解决问题的方法。

我们要做的就是在setY setHeight之前致电QRectQGraphicsRect定义{{1}}的几何图形。