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