如何在 Qt 中实现类似 Google 地图的磁贴滚动?
Posted
技术标签:
【中文标题】如何在 Qt 中实现类似 Google 地图的磁贴滚动?【英文标题】:How can I implement Google Maps-like tile scrolling in Qt? 【发布时间】:2010-02-10 18:36:54 【问题描述】:我正在使用 Qt/C++ 并尝试绘制一个大而复杂的 QGraphicsScene。一旦我添加了很多对象,平移和缩放就会变得非常缓慢。 (当然,这并不奇怪)。我玩过设备坐标缓存(有助于平移到某个点)和最小的视口更新等等,但最终对象太多了。我想做的是以某种方式从控制 UI 异步绘制项目。换句话说,就像谷歌地图一样,我想平移和缩放,让绘图尽可能快地赶上,但能够在项目完成绘制之前再次平移。
我正在尝试的一种方法是创建两个 QGraphicsScene。一个具有实际对象,但未附加到 QGraphicsView。另一个 QGraphicsScene 连接到 QGraphicsView,但它只有一些平铺的 QPixmap,其大小可以覆盖屏幕。该计划是使用空闲 CPU 周期来更新任何需要它的图块像素图。这似乎会给我对渲染的必要控制(所以我不必在重新渲染整个可见场景时阻塞)。想法?有人实现了吗?
【问题讨论】:
【参考方案1】:看这里:Generating content in threads。
听起来这与您尝试做的类似。平铺机制是加载大量数据的非常常见的方法。除了发布的链接,我还没有看到使用QGraphicsView
的简单示例。
40000 Chips 还展示了有关管理大量数据的一些内容。
【讨论】:
我见过“40000 Chips”——我对这个例子的理解是它做了一个很好的“细节层次”实现技术,每个芯片在 QGraphicsScene 中只有一个项目,但是如果缩放高于各种阈值,芯片的paint() 会绘制额外的细节。您提供的链接似乎非常相关。有机会我会尽快详细尝试...谢谢!以上是关于如何在 Qt 中实现类似 Google 地图的磁贴滚动?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 windows phone 8 中使用 push Sharp 发送带有参数的磁贴通知
如何在 Qt/C++/QML 中实现类似 WPF 的 MVVM?
如何区分本地用户和域用户,这些用户是我的凭据提供程序的登录屏幕上缓存的磁贴
IBM Worklight 6.1 - 来自推送通知的磁贴徽章从未在 Windows Phone 8 上清除