31

現在、プロジェクトを から に移行し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 日にリリースされる予定です。

これ以上の頭部外傷を防ぐために、これらの改善を待つだけの価値があるかもしれません.

そうは言っても、誰かが持っている場合は、私よりもクリーンなソリューションに興味があります。

4

1 に答える 1

6

QtWebEngine は、 downloadRequestedシグナルを使用して QWebEngineProfile クラスを介してダウンロードを管理します。

于 2015-07-31T13:40:35.257 に答える