2011-08-05 8 views
5

を処理するための外部アプリケーションを起動しない:QWebViewは、新しいウィンドウで開いていないリンクを行い、私はこのようにQWebViewを使用していますPDF

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

をそして、それは動作します。私は私が望むhtmlページを見ることができます。 これは問題です。デフォルトでは、リンク上で「右クリック」すると「新しいウィンドウで開く」というアクションが表示されますが、クリックすると何も起こりません。私は同じリンク上で "左クリック"しても動作します。 QWebViewは新しいウィンドウを開いていないという問題があります。なぜ誰が知っていますか?

もう1つ問題があります。いくつかのリンクはpdfファイルなので、私はQWebViewがダウンロードするか、それを開くアプリケーションを実行するように頼んでいます。しかし、代わりに何も起こらない。私は問題は、新しいウィンドウがQWebViewで開かれ、pdfでは開かれないという事実に関連していると思います。

明らかに、私はWebブラウザでページをテストしたが、すべてうまくいくので、問題はQWebViewのいくつかの設定にある。

QWebViewに必要なときに新しいウィンドウを開く方法を知っている人はいますか?

注:

  • すべてのリンクは、ローカルリソースです。

  • HTMLリンクは、この構文を使用します(そして、彼らは動作します):

<a href="./something.htm" TARGET="_parent">Some link</a> 
  • はpdfファイルへのリンクは(私がクリックしても何も起こらない)、この構文を使用します。
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a> 
+0

Click Me」をお持ちの場合、同じ問題があるようです。 – jdborg

答えて

7

あなた自身でコックを扱うようにしてください。ここにあなたを導く例があります。私はそれをコンパイルしていない。

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); 
    } 

あなたが表示しているHTMLが自身の他の部分に比べて/内部リンクを含む可能性がある場合、その後、あなたはQWebPage::DelegateExternalLinks代わりのQWebPage::DelegateAllLinksを使用する必要があることに注意してください。

+0

ありがとうございます。 – Luca

+0

2行目を修正してください:window-> page() - > setLinkDelegationPolicy(QWebPage :: DelegateAllLinks); – Juanin

+1

とそれはないウィンドウ - > setContextMenuPolicy(Qt :: ContextMenu); ?? – osirisgothra

1

上記の回答は参考になりますが、この質問に対しては圧倒される可能性があります。 QWebPage :: action(OpenLinkInNewWindow)にシグナルを接続するか、QWebPage :: triggerActionをオーバーライドするとこの問題が解決されます。

+2

この "QWebPage :: action(OpenLinkInNewWindow)"の実装方法は? – jondinham

関連する問題