2

QWebView をサブクラス化する Google マップ ウィジェットを作成しました。基本的に、すべての Google マップは Javascript で (Google の Javascript API を使用して) 記述され、ローカルに保存された html ファイルに保存されます。次に、ウィジェットは html を表示するだけで....その他の処理を行いますが、それは関係ありません。

私が抱えている問題は、Chrome や Safari などで同じ html ファイルを開く場合よりも、マップ タイルの読み込みにかなり長い時間がかかることです。Chrome と Safari は、Qt が使用する同じ WebKit に基づいていませんか?

誰かが同様の状況に遭遇しましたか? 表示が更新されるたびにマップ タイルを再取得する必要がないように、マップ タイルをキャッシュする方法はありますか? 理想的には、プログラムをオフラインで実行できるようにそれらを永続的にキャッシュできるようにしたいのですが、それは Google の TOS に違反していることはわかっています。タイルをキャッシュして、パン/ズームを高速化できるようにすることにします。

さまざまなフォーラムを検索すると、QNetworkDiskCache を使用することが潜在的な解決策として出てきましたが、誰もそれを機能させることができないようです. 同じhtml/javascriptがQWebViewよりもChromeとSafariで大幅に高速に実行される理由を理解できないようです

4

1 に答える 1

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(...);
于 2013-07-29T12:47:44.427 に答える