我正在将代码从QtWebKit移动到QtWebEngine。总的来说,过渡相当顺利,但是,我坚持一个特定的问题。我使用QWebEngineView显示Google Maps页面。放置的一些标记有弹出的信息,点击这里获取更多信息"这将在外部浏览器中打开链接。
使用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
答案 0 :(得分:0)
您不需要第二部分。试试这个:
QWebEngineView *view = new QWebEngineView();
MyQWebEnginePage *page = new MyQWebEnginePage();
view->setPage(page);