C++ 关于QGraphicsView中图像平铺的问题

C++ 关于QGraphicsView中图像平铺的问题,c++,image,qt,qt4,C++,Image,Qt,Qt4,这与我的另一个问题有关 如果我通过创建一个单独的QGraphicsItem(光栅数据作为其pixmap)来平铺一个大图像,我如何跟踪QGraphicsItem在场景中的位置?显然,对于光栅数据,重要的是要使所有的瓷砖“接触”以形成连续的图像,而且它们也必须位于正确的位置,这样图像就不会看起来杂乱无章 每个磁贴是否必须具有相对于其上/左/下/右相邻磁贴移动的定位方法?这看起来有点笨重。有没有更好的办法让他们一起行动 换句话说,如果我使用滚动条平移场景,或者拾取图像并在场景中拖动/移动它,我希望所有

这与我的另一个问题有关

如果我通过创建一个单独的QGraphicsItem(光栅数据作为其pixmap)来平铺一个大图像,我如何跟踪QGraphicsItem在场景中的位置?显然,对于光栅数据,重要的是要使所有的瓷砖“接触”以形成连续的图像,而且它们也必须位于正确的位置,这样图像就不会看起来杂乱无章

每个磁贴是否必须具有相对于其上/左/下/右相邻磁贴移动的定位方法?这看起来有点笨重。有没有更好的办法让他们一起行动

换句话说,如果我使用滚动条平移场景,或者拾取图像并在场景中拖动/移动它,我希望所有的平铺也移动并保持在相对于彼此的正确位置

控制布局的最佳方法是什么?需要渲染哪些分幅(即仅可见的分幅),并且仅在需要时填充数据?此外,一旦一个平铺被渲染,它的数据是否会从图像文件中删除并重新填充,比如说如果它在视图中停留一段时间,然后如果有人平移到该部分,则稍后会返回?

有(不止)两种方法:

  • 用哪一个 处理平铺项目的分组 为你。它移动、选择、更新 这是一组成员,好像他们是 一个。我从来没有用过它,但从 博士,这似乎和典型的 应用程序

  • 你自己在墙上刷瓷砖 一个自定义项的paint()。这 让您完全控制如何 放置并绘制瓷砖,同时 项目真正作为一个项目,因为它 是一个项目。这就是我想要的 做


  • 我以为你以前做过这种事,希望你能回答。如果要覆盖已经定制的QGraphicsItem的paint()方法,您能告诉我一些想法吗?这对我来说有点不清楚,例如,我如何告诉画师只画在我的观众中可见的东西,如何在画师中定位,等等。这是我一直在研究的一个有用的线程,但是它是使用一组QGraphicsSitem而不是一个来实现的。当你谈论使用一个QGI时,你的意思是仅仅使用一个QGI,还是像链接中提到的那样制作一些“tile QGI”,并从父项的油漆中绘制这些QGI瓷砖?如果是这样的话,这与团队做事的方式似乎没有太大的不同?我询问其中一些事情的主要原因是——如果你还记得的话,我当前的自定义Pixmap项目具有允许你在鼠标悬停在项目上时缩放项目的功能。我想如果我确实在一个平铺中有一堆这样的东西,我可以用这个.group()来检测,如果它存在的话,将缩放传递给QGraphicsSiteMgroup,它可能会在不调整位置的情况下放大或缩小它们,对吗?