5

私はこのようにQWebViewを使用しています:

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

そしてそれは動作します。欲しいhtmlページが見えます。問題はこれです。デフォルトでは、リンクを「右クリック」すると「新しいウィンドウで開く」というアクションが表示されますが、クリックしても何も起こりません。同じリンクを「左クリック」すると機能します。したがって、問題は、QWebViewによって新しいウィンドウが開かれないことです。誰かが理由を知っていますか?

別の問題があります。一部のリンクはPDFファイルであるため、QWebViewからダウンロードするか、アプリケーションを実行して開くように求められると思います。しかし、代わりに何も起こりません。この問題は、PDFではなくQWebViewで新しいウィンドウを開くことが許可されていないという事実に関連していると思います。

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

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

ノート:

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

  • htmlリンクはこの構文を使用します(そしてそれらは機能します):

 <a href="./something.htm" TARGET="_parent">Some link</a>
  • PDFへのリンクはこの構文を使用しています(クリックしても何も起こりません):
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a>
4

2 に答える 2

8

自分でチンコを処理してみてください。ここにあなたを導くことができる例があります。私はそれをコンパイルしていません。

    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.

于 2011-08-05T06:58:23.057 に答える
1

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

于 2012-03-14T13:27:45.967 に答える