我正在以这种方式使用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>
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a>
答案 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应解决此问题。