2010-01-14 152 views
0

當我點擊QWebView中的鏈接時,我需要根據該鏈接的MIME類型執行一些操作。QWebView獲取內容類型

顯然,當我點擊鏈接QWebView試圖導航那裏,但我怎麼得到這種內容類型之後呢?

回答

3

我相信你可以通過在加載頁面之後查看QWebElment的集合來獲取加載頁面的內容類型。首先,您需要爲webview小部件設置loadFinished事件插槽。像這樣:

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

on_pageLoad_finished方法應該在每次頁面加載到webview控件時執行。您可以通過Web框架對象訪問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屬性讓你的鏈接圖片所示。我想你可以在檢測類型時相信它的擴展;或者只需下載映像並使用文件簽名檢測它的類型即可。您可以爲此編寫代碼或使用一些第三方映像庫來獲取文件類型。

希望這會有所幫助,關注

+0

這隻適用於HTML頁面?如果我點擊一些其他類型的鏈接,說一個mp3怎麼辦?如何在這種情況下獲得MIME類型? – pafcu 2010-01-15 06:48:50

+0

請參閱我的原始回覆的更新 – 2010-01-16 04:11:07