QWebEngineView Открыть во внешнем браузере

Я перехожу свой код из QtWebKit в QtWebEngine. В целом переход был довольно плавным, однако я застрял на одном конкретном вопросе. Я использую QWebEngineView для отображения страницы Google Maps. Некоторые из размещенных маркеров имеют информационные окна, в которых появляется всплывающее окно «Щелкните здесь, чтобы получить дополнительную информацию», открывающее ссылку во внешнем браузере.

Используя QtWebKit, это было довольно просто с помощью политики setLinkDelegation. Однако здесь все немного сложнее. Я пытался последовать примеру, но каким-то образом мне нужно переопределить QWebEnginePage в QWebEngineView. Ниже то, что я придумал до сих пор. Есть идеи, как я могу все это связать?

Спасибо

#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

person goalie39    schedule 11.02.2016    source источник
comment
вы пробовали setPage? void QWebEngineView::setPage(QWebEnginePage *page)   -  person CapelliC    schedule 11.02.2016
comment
Я просто попробовал. Я полагаю, вы имеете в виду что-то вроде этого: MyQWebEnginePage thisPage; ui->map->setPage(thisPage); Однако это приводит к ошибке о неправильном типе.   -  person goalie39    schedule 11.02.2016
comment
почему не указатели? должно быть auto thisPage = new MyQWebEnginePage   -  person CapelliC    schedule 11.02.2016
comment
Это сделало это. Спасибо!   -  person goalie39    schedule 11.02.2016


Ответы (1)


Вторая часть вам не нужна. Попробуй это:

QWebEngineView *view = new QWebEngineView();
MyQWebEnginePage *page = new MyQWebEnginePage();
view->setPage(page);
person Jan Rüegg    schedule 27.07.2016