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链接使用这种语法(并且它们有效):
Run Code Online (Sandbox Code Playgroud)<a href="./something.htm" TARGET="_parent">Some link</a>
Run Code Online (Sandbox Code Playgroud)<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a>
尽量自己处理骰子.这是一个可以指导您的示例.我没有编译它.
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.