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

Luc*_*uca 5 pdf qt window hyperlink qwebview

我用这种方式使用QWebView:

QWebView *window = new QWebView();
window->setUrl(QString("my url"));
window->show();
Run Code Online (Sandbox Code Playgroud)

它有效.我可以看到我想要的html页面.问题是这个.默认情况下,如果我在链接上"右键单击",则会显示"在新窗口中打开"操作,但如果单击它,则不会发生任何操作.如果我在同一个链接上"左键单击"它可以工作.所以问题是QWebView没有打开新窗口.有谁知道为什么?

我有另一个问题.一些链接是pdf文件,所以我希望QWebView要求我下载它或运行一个应用程序来打开它.但没有任何反应.我认为这个问题与以下事实有关:QWebView不允许打开新窗口而不打开pdf.

显然我用网页浏览器测试了页面,一切运行良好,所以问题出在QWebView的某些设置中.

有人知道如何在需要时让QWebView打开新窗口吗?

笔记:

  • 所有链接都是本地资源.

  • html链接使用这种语法(并且它们有效):

 <a href="./something.htm" TARGET="_parent">Some link</a>
Run Code Online (Sandbox Code Playgroud)
  • 指向pdfs的链接使用此语法(单击时没有任何反应):
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a>
Run Code Online (Sandbox Code Playgroud)

O.C*_*.C. 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 );
    }
Run Code Online (Sandbox Code Playgroud)

请注意,如果您显示的HTML可能包含指向其自身其他部分的相对/内部链接,那么您应该使用QWebPage::DelegateExternalLinks而不是QWebPage::DelegateAllLinks.