2012-05-24 57 views
2

我創建了一個Google地圖窗口小部件,該窗口小部件爲QWebView子類。基本上,所有的谷歌地圖的東西都是用Javascript編寫的(使用Google的Javascript API)並保存在本地存儲的html文件中。然後,小部件只是顯示html ....並做了一些其他的事情,但這是無關緊要的。Qt Webview谷歌地圖緩存

我遇到的問題是,如果我在Chrome或Safari中打開相同的HTML文件,地圖磁貼的加載時間會明顯更長。 Chrome和Safari不是基於Qt使用的WebKit嗎?

有沒有人遇到類似的情況?有沒有辦法緩存地圖圖塊,以便在每次顯示更新時都不必重新獲取它們?理想情況下,我希望能夠永久緩存它們,以便我的程序可以脫機運行,但我知道這是針對Google的TOS。我會滿足於能夠緩存切片以加快平移/縮放。

在尋找各種論壇時,使用QNetworkDiskCache已經成爲一個潛在的解決方案,但似乎沒有人能夠得到這個工作。我似乎無法弄清楚爲什麼Chrome和Safari中的相同html/javascript運行速度明顯快於QWebView。

+1

您檢查了'QWebSetttings'類?有一些設置可能會加速瀏覽和交互。像'QWebSettings :: DnsPrefetchEnabled','QWebSettings :: OfflineWebApplicationCacheEnabled'和'QWebSettings :: TiledBackingStoreEnabled'。 – Ammar

+0

感謝您的建議@Ammar。我嘗試使用「this-> settings() - > setAttribute(...)」以及對setOfflineWebApplicationCachePath(...)的調用添加這些設置,但這似乎沒有任何幫助。起初,試圖啓用TiledBackingStore,顯着減慢了應用程序的速度。然後我將QWebView轉換爲QGraphicsWebView並再次嘗試。這一次,所有顯示的都是棋盤圖案。 – gwiz1124

+0

你最好的選擇是觀察網絡流量,看看哪些資源被拉動。此外,「相同的WebKit」不存在,請參閱我的解釋http://ariya.ofilabs.com/2011/06/your-webkit-port-is-special-just-like-every-other-port.html。 –

回答

0

QNetworkDiskCache可以在Google地圖上正常運行,與未啓用時相比,速度顯着提高。這應該做的伎倆:

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this); 

diskCache->setCacheDirectory(QCoreApplication::applicationDirPath() + "/cache"); 
manager->setCache(diskCache); 

你那麼管理者添加到網頁視圖:

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

然後去上加載HTML

frame->setHtml(...);