2010-01-14 3 views
0

QWebView에서 링크를 클릭하면 해당 링크의 MIME 형식에 따라 몇 가지 작업을 수행해야합니다.QWebView 콘텐츠 형식을 얻으려면

분명히 QWebView 링크를 클릭하면 거기로 이동하려고 시도하지만,이 후에 컨텐츠 유형을 얻으려면 어떻게해야합니까?

답변

3

페이지가로드 된 후 QWebElment의 컬렉션을보고로드 된 페이지의 콘텐츠 유형을 가져올 수 있다고 생각합니다. 먼저 webview widget에 대한 loadFinished 이벤트 슬롯을 설정해야합니다. 이렇게 :

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

페이지가 웹 뷰 컨트롤에로드 될 때마다 실행해야합니다. 웹 프레임 객체를 통해 웹 요소 컬렉션에 액세스 할 수 있습니다. 아래는 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 모델의 내용 유형 속성에는 메타 요소가 없습니다 :

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

하지만 아직 생성 된 DOM 개체가 있습니다. 이 특정 이미지의 경우 아래 그림과 같아야합니다 (프레임 -> 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 객체를 조회 할 경우 :

"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 속성은 당신에게 이미지에 대한 링크를 제공합니다

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

당신이 점점되어야한다 결과 다음과 표시됩니다. 유형을 감지 할 때 확장자를 신뢰할 수 있다고 생각합니다. 또는 이미지를 다운로드하고 파일 서명을 사용하여 이미지를 검색 할 수 있습니다. 이 코드를 작성하거나 타사 이미징 라이브러리를 사용하여 파일 유형을 가져올 수 있습니다.

도움이 되시길 바랍니다.

+0

이것은 HTML 페이지에서만 작동하나요? 다른 유형의 링크를 클릭하면 어떻게됩니까? 어떻게 MIME 형식을 얻을 수 있습니까? – pafcu

+0

pls, 원래 응답에 대한 업데이트를 참조하십시오. –