C++ Qt Webview谷歌地图缓存

C++ Qt Webview谷歌地图缓存,c++,qt,google-maps,caching,qwebview,C++,Qt,Google Maps,Caching,Qwebview,我已经创建了一个GoogleMaps小部件,它将QWebView分为几个类。基本上,谷歌地图的所有内容都是用Javascript编写的(使用谷歌的Javascript API),并保存在本地存储的html文件中。然后,小部件只显示html…并做一些其他的事情,但这是无关的 我遇到的问题是,与在Chrome或Safari中打开相同的html文件相比,加载地图分幅所需的时间要长得多。Chrome和Safari不是基于Qt使用的同一个WebKit吗 有没有人遇到过类似的情况?有没有一种方法可以缓存地图

我已经创建了一个GoogleMaps小部件,它将QWebView分为几个类。基本上,谷歌地图的所有内容都是用Javascript编写的(使用谷歌的Javascript API),并保存在本地存储的html文件中。然后,小部件只显示html…并做一些其他的事情,但这是无关的

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

有没有人遇到过类似的情况?有没有一种方法可以缓存地图分幅,这样它就不必在每次显示更新时重新获取它们?理想情况下,我希望能够永久缓存它们,这样我的程序就可以离线运行,但我知道这不符合谷歌的TOS。我将满足于能够缓存平铺以加速平移/缩放


在各种论坛的搜索中,使用QNetworkDiskCache已经成为一种潜在的解决方案,但似乎没有人能够让它发挥作用。我似乎不明白为什么同样的html/javascript在Chrome和Safari中运行得比QWebView快得多,QNetworkDiskCache在Google地图上运行得很好,与未启用时相比,速度有了显著提高。这应该可以做到:

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(...);

QNetworkDiskCache与Google地图配合使用效果良好,与未启用时相比,速度显著提高。这应该可以做到:

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(...);

您是否已签出
qwebsettings
课程?有一些设置可以加速浏览和交互。如
QWebSettings::DnsPrefetchEnabled
QWebSettings::OfflineWebApplicationCacheEnabled
QWebSettings::TiledBackingsStoreEnabled
。感谢您的建议@Ammar。我尝试使用“this->settings()->setAttribute(…)”以及对setOfflineWebApplicationCachePath(…)的调用添加这些设置,但这似乎没有任何帮助。起初,尝试启用TiledBackingStore会大大降低应用程序的速度。然后我将QWebView转换为QGraphicsWebView并重试。这一次,所有显示的都是棋盘格图案。您最好的办法是观察网络流量,并查看正在提取哪些资源。“同样的WebKit”也不存在,请看我的解释。@AriyaHidayat谢谢。请您详细说明“观察网络流量并查看正在提取哪些资源”的含义?尝试调试网络流量。它可以通过代理或插入您自己修改的网络访问管理器来完成,请参见我的示例。您是否签出了
qwebsettings
class?有一些设置可以加速浏览和交互。如
QWebSettings::DnsPrefetchEnabled
QWebSettings::OfflineWebApplicationCacheEnabled
QWebSettings::TiledBackingsStoreEnabled
。感谢您的建议@Ammar。我尝试使用“this->settings()->setAttribute(…)”以及对setOfflineWebApplicationCachePath(…)的调用添加这些设置,但这似乎没有任何帮助。起初,尝试启用TiledBackingStore会大大降低应用程序的速度。然后我将QWebView转换为QGraphicsWebView并重试。这一次,所有显示的都是棋盘格图案。您最好的办法是观察网络流量,并查看正在提取哪些资源。“同样的WebKit”也不存在,请看我的解释。@AriyaHidayat谢谢。请您详细说明“观察网络流量并查看正在提取哪些资源”的含义?尝试调试网络流量。它可以通过代理或插入您自己修改的网络访问管理器来完成,请参阅我的示例。