绘制对称 QGraphicsRectItem 的最聪明方法
Smartest way to draw symmetric QGraphicsRectItems
我正在编写一个 GUI,它应该在 2D 坐标系中显示系统的实体,用户可以 select 并四处拖动。该系统是镜像对称的 w.r.t。 x 和 y 轴。目前我正在使用 QGraphicsRectItem 对实体进行子类化,以便我可以在坐标系的第一象限 (x>0, y>0) 中拖动它。我重新实现了 paint 方法以使用 painter.drawRectangle() 绘制其他三个额外的矩形。因此,当我移动第 1 象限中的实体时,其他三个象限中的元素执行镜像运动。这很好用。
下一阶段,每个实体可以细分,即由数百个矩形组成。所以我需要绘制数百个矩形,并且需要绘制四次,并使用镜像操作。天真的方法需要四个 for 循环,但我想知道在 QT 中是否有更聪明的方法来执行此操作。因为我使用的是 PyQt,所以 for 循环有点麻烦。
如果你的绘图操作很慢,你可以做的最简单的事情就是绘制一个图像,然后简单地从图像中绘制缓存的绘画 4 次,这将非常快,因为它只是复制一些像素值。
不以项目为基础缓存绘图结果,而是缓存网格的象限可能会更有效。这样,如果您放大并且项目变得巨大或数量众多,您将不会浪费大量内存,相反,您只需要一个图像缓存,即象限的屏幕大小。
这实际上取决于您想要实现的目标,目前从描述中还不完全清楚,您的图片也没有显示。
我正在编写一个 GUI,它应该在 2D 坐标系中显示系统的实体,用户可以 select 并四处拖动。该系统是镜像对称的 w.r.t。 x 和 y 轴。目前我正在使用 QGraphicsRectItem 对实体进行子类化,以便我可以在坐标系的第一象限 (x>0, y>0) 中拖动它。我重新实现了 paint 方法以使用 painter.drawRectangle() 绘制其他三个额外的矩形。因此,当我移动第 1 象限中的实体时,其他三个象限中的元素执行镜像运动。这很好用。
下一阶段,每个实体可以细分,即由数百个矩形组成。所以我需要绘制数百个矩形,并且需要绘制四次,并使用镜像操作。天真的方法需要四个 for 循环,但我想知道在 QT 中是否有更聪明的方法来执行此操作。因为我使用的是 PyQt,所以 for 循环有点麻烦。
如果你的绘图操作很慢,你可以做的最简单的事情就是绘制一个图像,然后简单地从图像中绘制缓存的绘画 4 次,这将非常快,因为它只是复制一些像素值。
不以项目为基础缓存绘图结果,而是缓存网格的象限可能会更有效。这样,如果您放大并且项目变得巨大或数量众多,您将不会浪费大量内存,相反,您只需要一个图像缓存,即象限的屏幕大小。
这实际上取决于您想要实现的目标,目前从描述中还不完全清楚,您的图片也没有显示。