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