需要重写QWebEnginePage
重写虚函数 acceptNavigationRequest 然后把地址传上去就可以
#ifndef WEBENGINEPAGE_H
#define WEBENGINEPAGE_H
//webenginepage.h
#include <QWebEngineView>
class WebEnginePage : public QWebEnginePage
{
Q_OBJECT
public:
explicit WebEnginePage(QObject *parent = Q_NULLPTR);
virtual bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame);
private slots:
void onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
signals:
void httpUrl(QString url);
};
#include "webenginepage.h"
#include<qdebug.h>
#include<QDesktopServices>
WebEnginePage::WebEnginePage(QObject *parent):
QWebEnginePage(parent)
{ connect(this,SIGNAL(featurePermissionRequested(QUrl,QWebEnginePage::Feature)),this,SLOT(onFeaturePermissionRequested(QUrl,QWebEnginePage::Feature)));//这个是为了默认打开摄像头和话筒权限,可以删去
}
void WebEnginePage::onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature){//默认打开摄像头和话筒权限
if(feature == QWebEnginePage::MediaAudioCapture
|| feature == QWebEnginePage::MediaVideoCapture
|| feature == QWebEnginePage::MediaAudioVideoCapture)
setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionGrantedByUser);
else
setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionDeniedByUser);
}
bool WebEnginePage::acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame)
{
//qDebug()<<"acceptNavigationRequest"<<url.toString();
if (type == NavigationTypeLinkClicked)
{
//qDebug()<<"acceptNavigationRequest"<<url.toString();
emit httpUrl(url.toString());
return false;
}
return true;
}
主函数就写用到部分
//widget.cpp
page=new WebEnginePage();
ui->webWidget->setPage(page);
connect(page,SIGNAL(httpUrl(QString)),this,SLOT(httpUrl(QString)));
void Widget::httpUrl(QString url)
{
qDebug()<<"httpUrl"<<url;
}