QWebEngineView 在外部浏览器中打开

Posted

技术标签:

【中文标题】QWebEngineView 在外部浏览器中打开【英文标题】:QWebEngineView Open In External Browser 【发布时间】:2016-02-11 16:56:24 【问题描述】:

我正在将我的代码从 QtWebKit 转移到 QtWebEngine。总的来说,过渡相当顺利,但是,我被困在一个特定的问题上。我使用 QWebEngineView 来显示 Google 地图页面。放置的一些标记具有弹出“单击此处获取更多信息”的信息窗口,可在外部浏览器中打开链接。

使用 QtWebKit,这通过 setLinkDelegation 策略相当容易。但是,这里似乎有点复杂。我尝试按照示例进行操作,但不知何故我需要在 QWebEngineView 中重新定义 QWebEnginePage。以下是我到目前为止的想法。知道如何才能真正将这一切联系起来吗?

谢谢

#ifndef MYQWEBENGINEVIEW_H
#define MYQWEBENGINEVIEW_H

#include <QWebEngineView>
#include <QDesktopServices>

class MyQWebEnginePage : public QWebEnginePage

    Q_OBJECT

public:
    MyQWebEnginePage(QObject* parent = 0) : QWebEnginePage(parent)

    bool acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool isMainFrame)
    
         qDebug() << "acceptNavigationRequest("<<url << "," << type << "," << isMainFrame<<")";

        if (type == QWebEnginePage::NavigationTypeLinkClicked)
        
            QDesktopServices::openUrl(url);
            return false;
        
        return true;
    
;


class MyQWebEngineView : public QWebEngineView

    Q_OBJECT
public:
    MyQWebEngineView(QWidget* parent = 0);
    MyQWebEnginePage* page() const;

;

#endif // MYQWEBENGINEVIEW_H

【问题讨论】:

你试过 setPage 了吗? void QWebEngineView::setPage(QWebEnginePage *page) 我只是试了一下。我相信你的意思是这样的:MyQWebEnginePage thisPage; ui-&gt;map-&gt;setPage(thisPage); 但是,这会导致类型不正确的错误。 为什么不用指针?应该是auto thisPage = new MyQWebEnginePage 做到了。谢谢! 【参考方案1】:

您不需要第二部分。试试这个:

QWebEngineView *view = new QWebEngineView();
MyQWebEnginePage *page = new MyQWebEnginePage();
view->setPage(page);

【讨论】:

以上是关于QWebEngineView 在外部浏览器中打开的主要内容,如果未能解决你的问题,请参考以下文章

Webview 链接在外部浏览器中打开

如何在外部浏览器而不是应用内(instagram)中打开链接?

为啥我的侧载 Excel Javascript 加载项在外部浏览器中打开,而不是在任务窗格中打开?

Cordova RSS 提要链接不会在外部浏览器中打开

发出 newView Requested 信号时在外部浏览器中打开 URL

如何在点击 android 推送通知时在外部浏览器中打开 url?