2011-08-05 3 views
5

을 처리하기 위해 외부 응용 프로그램을 시작할 수 없습니다 :QWebView는 새 창에서 열리지 링크를 수행하고 나는이 방법으로 QWebView을 사용하고 PDF

QWebView *window = new QWebView(); 
window->setUrl(QString("my url")); 
window->show(); 

을 그리고 그것은 작동합니다. 내가 원하는 html 페이지를 볼 수 있습니다. 문제는 이것입니다. 기본적으로 링크를 "오른쪽 클릭"하면 "새 창에서 열기"라는 작업이 표시되지만 클릭하면 아무 일도 일어나지 않습니다. 같은 링크에서 "왼쪽 클릭"하면 작동합니다. 문제는 QWebView에서 새 창이 열리지 않는다는 것입니다. 아무도 이유를 아나요?

다른 문제가 있습니다. 일부 링크는 pdf 파일이므로 QWebView에서 다운로드하거나 응용 프로그램을 실행 해달라고 요청합니다. 하지만 그 대신에 아무 일도 일어나지 않습니다. 문제는 QWebView가 열지 못하게하고 pdf가 열지 못하게하는 것과 관련이 있다고 생각합니다.

분명히 웹 브라우저로 페이지를 테스트했는데 모든 것이 잘 작동하므로 문제는 QWebView의 일부 설정에 있습니다.

누군가 QWebView가 필요할 때 새 창을 여는 방법을 알고 있습니까?

주 :

  • 모든 링크는 지역의 자원입니다.

  • 하는 HTML 링크는이 구문을 사용합니다 (그리고 그들은 작동) :

<a href="./something.htm" TARGET="_parent">Some link</a> 
  • 는 PDF 파일에 대한 링크 (I 클릭하면 아무 일도 발생하지 않습니다)이 구문을 사용
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a> 
+0

'Click Me'을 사용하는 경우에도 동일한 문제가있는 것으로 보입니다. – jdborg

답변

7

혼자서 만지작 거리는 것을 시도하십시오. 다음은 귀하를 안내 할 수있는 예입니다. 나는 그것을 컴파일하지 않았다. 당신은 자신의 다른 부분에 비해/내부 링크를 포함 할 수있다 표시되는 HTML을, 당신은 QWebPage::DelegateExternalLinks 대신 QWebPage::DelegateAllLinks를 사용하는 경우는 것을

QWebView *window = new QWebView(); 
    window->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);//Handle link clicks by yourself 
    window->page()->setContextMenuPolicy(Qt::NoContextMenu); //No context menu is allowed if you don't need it 
    connect(window, SIGNAL(linkClicked(QUrl)), 
        this, SLOT(linkClickedSlot(QUrl))); 

    window->setUrl(QString("my url")); 
    window->show(); 

    //This slot handles all clicks  
    void MyWindow::linkClickedSlot(QUrl url) 
    { 
     if (url.ishtml()//isHtml does not exist actually you need to write something like it by yourself 
      window->load (url); 
     else//non html (pdf) pages will be opened with default application 
      QDesktopServices::openUrl(url); 
    } 

참고.

+0

답변을 주셔서 대단히 감사합니다 – Luca

+0

그냥 두 번째 줄을 수정하십시오 : window-> page() -> setLinkDelegationPolicy (QWebPage :: DelegateAllLinks); – Juanin

+1

그리고 윈도우가 아닙니다.> setContextMenuPolicy (Qt :: ContextMenu); ?? – osirisgothra

1

위의 대답은 유익하지만이 질문에 대해서는 압도 될 수 있습니다. QWebPage :: action (OpenLinkInNewWindow)에 신호를 연결하거나 QWebPage :: triggerAction을 재정의하면이 문제가 해결됩니다.

+2

이 "QWebPage :: action (OpenLinkInNewWindow)"을 구현하는 방법은 무엇입니까? – jondinham

관련 문제