現在、プロジェクトを から に移行しQtWebkit
ていQWebEngine
ます。ただし、ダウンロードの処理は少し頭痛の種です。以前はQWebPage::unsupportedContent
、次のようにシグナルを使用してこれを処理していました。
QWebPage* webPage = new QWebPage(this);
QObject::connect(webPage, &QWebPage::unsupportedContent, [] (QNetworkReply* reply) {
// do stuff with the reply
reply->readAll();
});
を使用するときQtWebEngine
、私が考えることができる唯一のことは、QWebEngineView::urlChanged
シグナルを使用してサーバーに要求を行うことであり、それが機能するかどうかさえわかりません。
QNetworkAccessManager* accessManager = new QNetworkAccessManager(this);
QWebEngineView* webView = new QWebEngineView(this);
QObject::connect(webView, &QWebEngineView::urlChanged, [=] (const QUrl& url) {
if (url.path().endsWith("some_endpoint_which_results_in_a_download") {
QNetworkReply* reply = accessManager->get(url);
// do the same stuff to the reply
reply->readAll();
}
})
明らかに、このアプローチは、ダウンロードにつながるエンドポイントをアプリケーションにハードコーディングする必要があるという点で非常に制限的です。しかし、私はより良い解決策を見ることができません。誰かがより良いものを思いつきましたか?
- アップデート -
Qt の5.5 リリース計画のドキュメントでは、Web キャッシュと Cookie に対する開発者の制御に対するその他の改善点の中で、次の機能の概要が説明されています。
ファイルのダウンロードを管理するための API を追加
5.5 ベータ版は 2015 年 9 月 4 日にリリースされ、最終版は 2015 年 5 月 26 日にリリースされる予定です。
これ以上の頭部外傷を防ぐために、これらの改善を待つだけの価値があるかもしれません.
そうは言っても、誰かが持っている場合は、私よりもクリーンなソリューションに興味があります。