Я нахожусь в процессе перемещения моего кода из 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
Вам не нужна вторая часть. Попробуй это:
QWebEngineView *view = new QWebEngineView();
MyQWebEnginePage *page = new MyQWebEnginePage();
view->setPage(page);
Других решений пока нет …