4

コードを QtWebKit から QtWebEngine に移行中です。全体として、移行はかなりスムーズに進みましたが、1 つの特定の問題に行き詰まっています。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

2番目の部分は必要ありません。これを試して:

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