2016-02-11 131 views
4

我正在将我的代码从QtWebKit移动到QtWebEngine。总的来说,过渡相当顺利,但是,我陷入了一个特定的问题。我使用QWebEngineView来显示Google Maps页面。一些放置的标记有infowindows弹出“单击此处了解更多信息”,它打开外部浏览器中的链接。QWebEngineView在外部浏览器中打开

使用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

你试过setPage吗? 'void QWebEngineView :: setPage(QWebEnginePage * page)' – CapelliC

+0

我刚刚给它一个镜头。我相信你的意思是这样的: 'MyQWebEnginePage thisPage; ui-> map-> setPage(thisPage);' 但是,这会导致关于错误类型的错误。 – goalie39

+0

为什么不指针?应该是'auto thisPage = new MyQWebEnginePage' – CapelliC

回答

0

你不需要第二部分。试试这个:

QWebEngineView *view = new QWebEngineView(); 
MyQWebEnginePage *page = new MyQWebEnginePage(); 
view->setPage(page); 
相关问题