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

    技术2022-05-20  51

    在使用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(); }

    最新回复(0)