2010-01-14 4 views
0

Lorsque je clique sur un lien dans un QWebView, je dois effectuer certaines actions en fonction du type MIME de ce lien.QWebView obtient le type de contenu

De toute évidence, lorsque je clique sur le lien QWebView essaie d'y naviguer, mais comment puis-je obtenir le type de contenu après cela?

Répondre

3

Je crois que vous pouvez obtenir le type de contenu de la page chargée en regardant dans la collection de QWebElment après le chargement de votre page. Vous devez d'abord configurer l'emplacement d'événement loadFinished pour le widget webview. Comme ceci:

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

méthode on_pageLoad_finished doit être exécutée chaque fois qu'une page est chargée dans le contrôle WebView. Vous avez accès aux collections d'éléments Web via l'objet webframe. Voici une mise en œuvre possible de la fente 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"); 
     } 
    } 
} 

il devrait vider le type de contenu pour chaque nouvelle page chargée dans la sortie de l'application.

update0 liens d'image:

il n'y a aucun élément meta attribut type de contenu dans le modèle DOM soulignement si l'utilisateur clique sur l'image ou si vous le charger comme ça:

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

mais certains objets dom sont encore créés. Pour cette image particulière, il devrait ressembler à celui ci-dessous (vous pouvez obtenir via 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> 

donc si vous interroger pour les objets IMG en utilisant le code ci-dessous:

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

vous devriez obtenir le résultat suivant:

"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" 

attribut src vous donne le lien pour l'image montré. Je suppose que vous pouvez faire confiance à son extension lors de la détection du type; ou simplement télécharger l'image et détecter son type en utilisant la signature de fichier. Vous pouvez écrire le code pour cela ou utiliser des bibliothèques d'imagerie tierces pour obtenir le type de fichier.

+0

Cela ne fonctionne que sur les pages HTML? Que faire si je clique sur un autre type de lien, disons un mp3? Comment puis-je obtenir le type MIME dans ce cas? – pafcu

+0

pls, voir la mise à jour pour ma réponse originale –

Questions connexes