方法:重载QWebEngineView里的createWindow函数
//mywebengine.h #include <QWebEngineView> #include <QWebEnginePage> #include <QUrl> #include <QtWidgets> class MyWebEngine: public QWebEngineView { Q_OBJECT public: MyWebEngine(QWidget *parent=nullptr); protected: //鼠标左键点击触发 QWebEngineView * createWindow(QWebEnginePage::WebWindowType type) override; private slots: void onUrlChanged(QUrl url); };
#include "mywebengine.h" MyWebEngine::MyWebEngine(QWidget *parent): QWebEngineView(parent) { connect(this, SIGNAL(urlChanged(QUrl)), this, SLOT(onUrlChanged(QUrl))); } QWebEngineView *MyWebEngine::createWindow(QWebEnginePage::WebWindowType type){ Q_UNUSED(type) qDebug() << type; QWebEngineView * newview = new QWebEngineView(this); connect(newview, SIGNAL(urlChanged(QUrl)), this, SLOT(onUrlChanged(QUrl))); return newview; } void MyWebEngine::onUrlChanged(QUrl url){ setUrl(url); qDebug() << "goto url : "<< url; }