Qt Webview Google Maps Caching

Qt Webview Google Maps Caching

本文关键字:Caching Maps Google Webview Qt      更新时间:2023-10-16

>我创建了一个谷歌地图小部件,它对QWebView进行了子类。基本上,所有谷歌地图的东西都是用Javascript编写的(使用谷歌的Javascript API),并保存在本地存储的html文件中。然后,小部件只显示 html....并做一些其他的事情,但这无关紧要。

我遇到的问题是,与我在Chrome或Safari中打开相同的html文件相比,地图图块的加载时间要长得多。Chrome和Safari不是基于Qt使用的相同WebKit吗?

有没有人遇到过类似的情况?有没有办法缓存地图切片,这样就不必在每次更新显示时重新获取它们?理想情况下,我希望能够永久缓存它们,以便我的程序可以离线运行,但我知道这违反了 Google 的 TOS。我将满足于能够缓存瓷砖以加快平移/缩放速度。

在搜索各种论坛时,使用QNetworkDiskCache已经成为一个潜在的解决方案,但似乎没有人能够让它工作。我似乎无法弄清楚为什么相同的html/javascript在Chrome和Safari中的运行速度比在QWebView中快得多。

QNetworkDiskCache在谷歌地图上工作得很好,与未启用时相比,速度有了显着提高。这应该可以解决问题:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
diskCache->setCacheDirectory(QCoreApplication::applicationDirPath() + "/cache");
manager->setCache(diskCache);

然后,将管理器添加到 Web 视图:

frame->page()->setNetworkAccessManager(manager);
frame->page()->settings()->setMaximumPagesInCache(10);

然后继续加载你的html

frame->setHtml(...);