5

我以这种方式使用 QWebView:

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>
  • pdfs 的链接使用这种语法(单击时没有任何反应):
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a>
4

2 回答 2

8

尝试自己处理 cick。这是一个可以指导您的示例。我还没有编译它。

    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 回答