【问题标题】:Question regarding image tiling in a QGraphicsView关于 QGraphicsView 中图像平铺的问题
【发布时间】:2011-06-12 00:00:24
【问题描述】:

这与我的其他问题之一有关。

如果我通过创建单独的 QGraphicsItem(将光栅数据作为其像素图)来平铺大图像,我如何跟踪 QGraphicsItem 在场景中的位置?显然,对于栅格数据,重要的是要让所有图块“接触”以形成连续图像,并且它们还必须位于正确的位置,以免图像看起来混乱。

是否每个图块都必须具有相对于其在顶部/左侧/底部/右侧的邻居移动的定位方法?这似乎有点笨拙。有没有更好的方法让它们一起移动?

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

控制布局、需要渲染哪些图块(即只显示可见图块)以及仅在需要时填充数据的最佳方法是什么?此外,一旦一个图块被渲染,它的数据是否曾经被丢弃,并从图像文件中重新填充,比如它是否在一段时间内不可见,然后如果有人平移到该部分,稍后再回来?

【问题讨论】:

    标签: c++ image qt qt4


    【解决方案1】:

    有(超过)2 种方法可以做到这一点:

    1. 使用QGraphicsItemGroup which 处理您的磁贴项目的分组 为你。它移动、选择、更新 它是小组成员,好像他们是 一。我从未使用过它,但从 doc,它似乎适用于典型的 应用程序。

    2. 自己在 一个自定义项目的paint()。这个 让您完全控制如何 放置并绘制瓷砖,而 项目真正充当一个项目,因为它 是,嗯,一个项目。这就是我 做。

    【讨论】:

    • 我希望你能回答,我想你以前做过这种事情。如果我要覆盖我已经定制的 QGraphicsItem 的 paint() 方法,你能给我一些想法吗?对我来说有点不清楚,例如,我如何告诉paint 只绘制在我的查看器中可见的东西,如何在painter 中进行定位等。
    • stackoverflow.com/questions/5951072/… 这是我一直在关注的一个有用的线程,但它是使用一组 QGraphicsItems 而不是一个来实现的。当您谈论使用单个 QGI 时,您的意思是从字面上只使用单个 QGI,还是像链接中提到的那样制作某种“平铺 QGI”,并从父项目的油漆中绘制这些 QGI 平铺?如果是这样,看起来和团队的做事方式没有太大区别?
    • 我询问其中一些问题的主要原因 - 如果您还记得的话,我当前的自定义 Pixmap 项目具有允许您在将鼠标悬停在项目上时对其进行缩放的功能。我想如果我确实在一个图块中有一堆这些,我可以用 this.group() 检测,如果它存在,将缩放传递给 QGraphicsItemGroup 可能会在不调整位置的情况下缩放它们,对吧?
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-06-04
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多