QWebView получить тип контента - PullRequest
0 голосов
/ 14 января 2010

Когда я щелкаю ссылку в QWebView, мне нужно выполнить некоторые действия в зависимости от типа MIME этой ссылки.

Очевидно, что когда я нажимаю на ссылку, QWebView пытается перейти туда, но как мне получить тип контента после этого?

1 Ответ

3 голосов
/ 15 января 2010

Я полагаю, что вы можете получить тип содержимого загруженной страницы, посмотрев коллекцию QWebElment после загрузки вашей страницы. Сначала вам нужно настроить слот события loadFinished для виджета веб-просмотра. Как это:

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

Метод on_pageLoad_finished должен выполняться каждый раз, когда страница загружается в элемент управления webview. Там у вас есть доступ к коллекциям веб-элементов через объект webframe. Ниже приведена возможная реализация слота 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 дает ссылку для показанного изображения. Я думаю, вы можете доверять его расширению при обнаружении типа; или просто загрузите изображение и определите его тип, используя подпись файла. Вы можете написать код для этого или использовать сторонние библиотеки изображений для получения типа файла.

надеюсь, это поможет, с уважением

...