QWebEngineView 在外部浏览器中打开
Posted
技术标签:
【中文标题】QWebEngineView 在外部浏览器中打开【英文标题】:QWebEngineView Open In External Browser 【发布时间】:2016-02-11 16:56:24 【问题描述】:我正在将我的代码从 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
【问题讨论】:
你试过 setPage 了吗?void QWebEngineView::setPage(QWebEnginePage *page)
我只是试了一下。我相信你的意思是这样的:MyQWebEnginePage thisPage; ui->map->setPage(thisPage);
但是,这会导致类型不正确的错误。
为什么不用指针?应该是auto thisPage = new MyQWebEnginePage
做到了。谢谢!
【参考方案1】:
您不需要第二部分。试试这个:
QWebEngineView *view = new QWebEngineView();
MyQWebEnginePage *page = new MyQWebEnginePage();
view->setPage(page);
【讨论】:
以上是关于QWebEngineView 在外部浏览器中打开的主要内容,如果未能解决你的问题,请参考以下文章
如何在外部浏览器而不是应用内(instagram)中打开链接?
为啥我的侧载 Excel Javascript 加载项在外部浏览器中打开,而不是在任务窗格中打开?