【问题标题】:How can I implement Google Maps-like tile scrolling in Qt?如何在 Qt 中实现类似 Google 地图的磁贴滚动?
【发布时间】:2010-02-10 18:36:54
【问题描述】:

我正在使用 Qt/C++ 并尝试绘制一个大而复杂的 QGraphicsScene。一旦我添加了很多对象,平移和缩放就会变得非常缓慢。 (当然,这并不奇怪)。我玩过设备坐标缓存(有助于平移到某个点)和最小的视口更新等等,但最终对象太多了。我想做的是以某种方式从控制 UI 异步绘制项目。换句话说,就像谷歌地图一样,我想平移和缩放,让绘图尽可能快地赶上,但能够在项目完成绘制之前再次平移。

我正在尝试的一种方法是创建两个 QGraphicsScene。一个具有实际对象,但未附加到 QGraphicsView。另一个 QGraphicsScene 连接到 QGraphicsView,但它只有一些平铺的 QPixmap,其大小可以覆盖屏幕。该计划是使用空闲 CPU 周期来更新任何需要它的图块像素图。这似乎会给我对渲染的必要控制(所以我不必在重新渲染整个可见场景时阻塞)。想法?有人实现了吗?

【问题讨论】:

    标签: c++ qt qgraphicsview


    【解决方案1】:

    看这里:Generating content in threads。

    听起来这与您尝试做的类似。平铺机制是加载大量数据的非常常见的方法。除了发布的链接,我还没有看到使用QGraphicsView 的简单示例。

    40000 Chips 还展示了有关管理大量数据的一些内容。

    【讨论】:

    • 我见过“40000 Chips”——我对这个例子的理解是它做了一个很好的“细节层次”实现技术,每个芯片在 QGraphicsScene 中只有一个项目,但是如果缩放高于各种阈值,芯片的paint() 会绘制额外的细节。您提供的链接似乎非常相关。有机会我会尽快详细尝试...谢谢!
    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多