【发布时间】:2017-08-07 21:55:27
【问题描述】:
我已经在 PyQt5 中运行了Qt scenegraph tutorial。好消息是我得到了贝塞尔曲线,正如承诺的那样。更好的是,当我调整窗口大小时,会添加一条新的贝塞尔曲线以匹配新的窗口大小。问题是旧的贝塞尔曲线仍然存在。如何让 Qt 仅绘制最近的几何图形?
这是我在教程中的绘图代码的端口
def updatePaintNode(self, oldNode, _):
if not oldNode:
node = QSGGeometryNode()
geometry = QSGGeometry(QSGGeometry.defaultAttributes_Point2D(),
self._segment_count)
geometry.setLineWidth(2)
geometry.setDrawingMode(QSGGeometry.DrawLineStrip)
node.setGeometry(geometry)
node.setFlag(QSGNode.OwnsGeometry)
material = QSGFlatColorMaterial()
material.setColor(QColor(255, 0, 0))
node.setMaterial(material)
node.setFlag(QSGNode.OwnsMaterial)
else:
node = oldNode
geometry = node.geometry()
geometry.allocate(self._segment_count)
vertices = geometry.vertexDataAsPoint2D()
for i in range(self._segment_count):
t = float(i)/(self._segment_count-1)
invt = 1-t
pos = invt * invt * invt * self._p1 \
+ 3 * invt * invt * t * self._p2 \
+ 3 * invt * t * t * self._p3 \
+ t * t * t * self._p4 \
x = pos.x() * self.width()
y = pos.y() * self.height()
vertices[i].set(x, y)
node.markDirty(QSGNode.DirtyGeometry)
return node
【问题讨论】:
-
你不检查 - 如果
oldNode在调整大小后为空? -
@folibis 我在 oldNode 上检查 null 的唯一地方是上面的第二行。我应该为调整大小实施单独的处理程序吗?