QWebView中打开二级连接的方法实现

在使用QWebView类时,如果想打开网页中的链接,我们要这样做!

我们可以使用网页的QwebPage类中的linkClicked(QUrl)来做信号,当我们触发这个信号时,我们就可以让它在一个新的窗口中打开这个链接,但是我们在查看linkClicked()信号时,会发现有这样一句话:

By default no links are delegated and are handled by QWebPage instead.

默认情况下没有链接下放而不是由QWebPage处理。

所以,我们要对它进行一下设置,那我们就要进下步看一下 linkDelegationPolicy

void

setLinkDelegationPolicy ( LinkDelegationPolicy policy )

我们会发现有这样一个函数,可以调用它来设置这个模式,看到这里,我们还不行我们会发现还有一个东西我们不知道,那就是LinkDelegationPolicy,那我们就要进一步看一下它是做什么的了。

enum QWebPage::LinkDelegationPolicy

This enum defines the delegation policies a webpage can have when activating links and emitting the linkClicked() signal.

Constant

Value

Description

QWebPage::DontDelegateLinks

0

No links are delegated. Instead, QWebPage tries to handle them all.

QWebPage::DelegateExternalLinks

1

When activating links that point to documents not stored on the local filesystem or an equivalent - such as the Qt resource system - thenlinkClicked() is emitted.

QWebPage::DelegateAllLinks

2

Whenever a link is activated the linkClicked() signal is emitted.

我们会发现它是一个枚举类型的,它的默认值应该就是0,所以我们在调用linkClicked()不会触发的原因就在这里,选择那种模式就要看我们的实际情况了!

部分代码如下:

信号和槽的链接:

QObject::connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(openUrlSlot(QUrl)));

这样做可以避免打开多个窗口的问题,否则出现这个程序点据了整个任务栏。

QObject::connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(newWindowSlot(QUrl)));

这样做就可会出现上面我说的情况,尽量避免使用这种方法。

newWindowSlot()的实现:

void MainWindow::newWindowSlot(QUrl url)
{
    MainWindow *other =new MainWindow;
    other->ui->webView->load(url);
    other->show();
}

你可能感兴趣的:(url,System,qt,任务,Signal)