2012-05-24 4 views
2

Я создал виджет Google maps, который подклассы QWebView. В принципе, все материалы Google Maps записываются в Javascript (с использованием Javascript API Google) и сохраняются в html-файле, хранящемся локально. Затем виджет просто отображает html .... и делает некоторые другие вещи, но это не имеет значения.Qt Webview Google Maps Caching

Проблема, с которой я сталкиваюсь, заключается в том, что накладки на карте занимают значительно больше времени, чем если бы я открывал один и тот же файл html, скажем, Chrome или Safari. Разве Chrome и Safari не основаны на одном и том же WebKit, который использует Qt?

Неужели кто-нибудь сталкивается с подобной ситуацией? Есть ли способ кэшировать плитки карт, чтобы он не возвращал их каждый раз при обновлении дисплея? В идеале, я хотел бы иметь возможность кэшировать их навсегда, чтобы моя программа могла работать автономно, но я знаю, что это против Google TOS. Я соглашусь на возможность кэшировать плитки, чтобы ускорить панорамирование/масштабирование.

При поиске по различным форумам использование QNetworkDiskCache стало потенциальным решением, но никто, похоже, не может заставить это работать. Я просто не могу понять, почему тот же html/javascript работает значительно быстрее в Chrome и Safari, чем в 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); 

Вы затем добавить менеджер в свой Webview:

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

Затем перейдите и загрузите ваш HTML

frame->setHtml(...);