QWebView不会在新窗口中打开链接,也不会启动外部应用程序来处理pdf

时间:2011-08-05 03:52:01

标签: qt pdf window hyperlink qwebview

我正在以这种方式使用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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

上述答案内容丰富,但可能会因此问题而不堪重负。 将信号连接到QWebPage :: action(OpenLinkInNewWindow)或覆盖QWebPage :: triggerAction应解决此问题。