Performance 绘制对称Qgraphics反射项的最智能方法

Performance 绘制对称Qgraphics反射项的最智能方法,performance,qt,draw,Performance,Qt,Draw,我正在编写一个GUI,它应该在2D坐标系中显示系统的实体,用户可以选择并拖动。该系统在x轴和y轴上是镜像对称的。目前,我正在使用QGraphicsRectItem对一个实体进行子类化,以便在坐标系的第一个象限x>0,y>0中拖动它。我使用painter.drawRectangle重新实现了绘制方法来绘制其他三个额外的矩形。因此,当我移动象限1中的实体时,其他三个象限中的元素执行镜像运动。这很有效 在下一阶段中,每个实体都可以细分,即由数百个矩形组成。所以我需要画几百个矩形,四次,用镜像操作。天真

我正在编写一个GUI,它应该在2D坐标系中显示系统的实体,用户可以选择并拖动。该系统在x轴和y轴上是镜像对称的。目前,我正在使用QGraphicsRectItem对一个实体进行子类化,以便在坐标系的第一个象限x>0,y>0中拖动它。我使用painter.drawRectangle重新实现了绘制方法来绘制其他三个额外的矩形。因此,当我移动象限1中的实体时,其他三个象限中的元素执行镜像运动。这很有效


在下一阶段中,每个实体都可以细分,即由数百个矩形组成。所以我需要画几百个矩形,四次,用镜像操作。天真的方法需要四个for循环,但我想知道在QT中是否有更聪明的方法来实现这一点。for循环有点痛,因为我使用的是PyQt。

如果您的绘制操作非常慢,那么您可以做的最简单的事情就是绘制一个图像,然后简单地从图像中绘制缓存的绘画4次,这将非常快,因为它只会复制一些像素值

不基于项目缓存图形结果,而是缓存网格的一个象限可能会更有效。通过这种方式,如果您放大,项目数量变大或变多,您将不会浪费大量内存,相反,您只需要一个图像缓存,即象限的屏幕大小


这实际上取决于您想要实现的目标,从描述上看,这一点还不完全清楚,您的图像也没有显示出来。

可能应该重新绘制,而不是复制项目。我现在写不出正确的答案,但是。。。我认为您可以将QGraphicscene及其draw事件子类化,将QPaint缩放到-1,然后再次调用基本实现是的,我认为这应该是可能的,但这仍然需要所有for循环。也许我应该把我的问题说得更清楚些。我一直在考虑blit操作或者类似OpenGL中的显示列表之类的远程操作,一些快速且内置于Qt中的操作。一个循环生成一个图像并渲染四次或更多次怎么样?例如,生成一个QImage,用同一个图像创建多个QGraphicsPixMapItem并将它们放置在场景中。我想知道为什么我的图像没有显示出来。对不起。我在呈现页面时看到了它。