4

我正在将我的代码从 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
4

1 回答 1

0

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

QWebEngineView *view = new QWebEngineView();
MyQWebEnginePage *page = new MyQWebEnginePage();
view->setPage(page);
于 2016-07-27T12:48:39.753 回答