在QGraphicsView中拼大QGraphicsItem

问题描述:

我目前正在使用一个QGraphicsItem,我正在加载一个pixmap来显示一些栅格数据。我目前没有做任何平铺或类似的任何事情,但我已经覆盖了我的QGraphicsItem,以便我可以实现像鼠标下的缩放,跟踪我悬停在上面的小图像等功能等。在QGraphicsView中拼大QGraphicsItem

我的文件即将关闭磁盘大小为1 - 2GB,我想找出一个更优化的显示方式。对于初学者来说 - 似乎我可以一次显示它们,因为我使用的QImage(Qpixmap-> QImage-> QgraphicsItem)似乎在任何像素索引超过32,xxx(16位)时都会失败。

那么如果我想维护使用单个QGraphicsItem,我应该如何实现平铺?我不认为我想要使用多个QGraphicsItems来保存显示的数据+相邻数据“about”来显示。这需要我在所有人碾压并试图缩放一块瓷砖时将它们全部缩放,从而导致我也必须重新定位一切,对吗?我想这也需要有关于从文件中准确获得什么数据的知识。

然而我很乐于接受创意。我还假设以某种线程方式完成此操作会很好,这样用户可以继续平移图像或缩放,即使所有图块尚未加载。

我看了一下40000芯片的演示,但我不确定这就是我所追求的 - 看起来它基本上仍然显示所有芯片,就像你通常在场景中一样,只是覆盖了涂料方法供应更少的细节......还是我错过了关于这个演示的东西?

+0

qgraphicsview会自动剔除你不能看到的对象,所以使用大量的qgraphicsitems而不是一个大型的qgraphicsitem肯定是最优化的 – Tom 2011-06-10 10:53:32

这不足为奇,难以处理大小的图像。 Qt并不是为它设计的,而且由于特定的操作系统以及可能的内存管理方式,可能还有其他因素。

你很清楚需要(或者至少应该使用)平铺机制。您的主要问题是,您需要一种访问图像数据的方式,该方式不涉及使用QImage(或QPixmap)加载整个事物并提供对该图像数据的访问权限,因为已经确定该图像数据失败。

你要么需要找到一个方法(库),可以将整个图像加载到内存中,并允许你拉的图像数据的区域出来,或从磁盘上的文件加载只针对特定区域。当您试图在图像的任何部分“缩放”时,您还需要能够调整非常大的区域的大小以降低分辨率的区域。这样不幸的是,我从来没有做过的图像处理,从而很熟悉怎么库可供选择,Qt的可能不会能够帮助您直接与此。

然而,您可能会探索的一个选择是使用图像编辑软件包将您的大图像分解为更易于管理的块。那么也许类似于芯片演示的QGraphicsView解决方案将起作用。