0

QWebView のリンクをクリックすると、そのリンクの MIME タイプに基づいていくつかのアクションを実行する必要があります。

明らかに、リンクをクリックすると QWebView はそこに移動しようとしますが、この後にコンテンツ タイプを取得するにはどうすればよいですか?

4

1 に答える 1

3

ページが読み込まれた後に QWebElment のコレクションを調べることで、読み込まれたページのコンテンツ タイプを取得できると思います。最初に、webview ウィジェットの loadFinished イベント スロットを設定する必要があります。このような:

QWebView::connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(on_pageLoad_finished(bool)));

on_pageLoad_finished メソッドは、ページが webview コントロールに読み込まれるたびに実行する必要があります。そこでは、webframe オブジェクトを介して Web 要素コレクションにアクセスできます。以下は on_pageLoad_finished スロットの可能な実装です

void MainWindow::on_pageLoad_finished(bool ok)
{
    if (!ok) return;

    QWebFrame* frame = ui->webView->page()->currentFrame();
    if (frame!=NULL)
    {
        QWebElementCollection collection = frame->findAllElements("meta[http-equiv=content-type]");
        foreach (QWebElement element, collection)
        {
            qDebug() << element.attribute("http-equiv");
            qDebug() << element.attribute("content");
        }
    }
}

アプリケーション出力にロードされた新しいページごとにコンテンツ タイプをダンプする必要があります。

update0画像リンク:

ユーザーが画像をクリックした場合、またはそのようにロードした場合、下線付きDOMモデルに content-type 属性を持つメタ要素はありません:

QUrl url("http://www.motociclismo.es/rcs/noticias/2008/10_Oct/0610-bmw-s1000RR-02.jpg");
ui->webView->load(url);

しかし、作成された dom オブジェクトがまだいくつかあります。この特定の画像の場合、次のようになります (frame->toHtml で取得できます)。

<html>
<body style="margin: 0px;">
<img style="-webkit-user-select: none; cursor: -webkit-zoom-in; " src="http://www.motociclismo.es/rcs/noticias/2008/10_Oct/0610-bmw-s1000RR-02.jpg" width="426" height="320">
</body>
</html>

したがって、以下のコードを使用して IMG オブジェクトを照会する場合:

QWebElementCollection collection0 = frame->findAllElements("img");
foreach (QWebElement element, collection0)
{
    QStringList attributesList = element.attributeNames();
    foreach (QString attributeName, attributesList)
    {
        qDebug() << attributeName << ":" << element.attribute(attributeName);
    }
}

次の結果が得られるはずです。

"style" : "-webkit-user-select: none; cursor: -webkit-zoom-in; "  
"src" : "http://www.motociclismo.es/rcs/noticias/2008/10_Oct/0610-bmw-s1000RR-02.jpg"
"width" : "426"  
"height" : "320"

src 属性は、表示されている画像へのリンクを提供します。タイプを検出するときにその拡張子を信頼できると思います。または、イメージをダウンロードして、ファイル署名を使用してそのタイプを検出します。このためのコードを記述するか、サードパーティのイメージング ライブラリを使用してファイル タイプを取得できます。

これが役に立てば幸いです、よろしく

于 2010-01-15T01:29:36.177 に答える