Qt QWebEngineView创建窗口
好吧,弯曲我的大脑试图理解QWebEngine 我理解实现虚拟功能的概念,但我不确定如何获取用户单击的url,即页面或视图请求的newTab/newWindow链接Qt QWebEngineView创建窗口,qt,qtwebengine,Qt,Qtwebengine,好吧,弯曲我的大脑试图理解QWebEngine 我理解实现虚拟功能的概念,但我不确定如何获取用户单击的url,即页面或视图请求的newTab/newWindow链接 QWebEngineView * WebEngineTabView::createWindow(QWebEnginePage::WebWindowType type) { // signal Main window for a new view( @URL ) emit requestNewTab(page()->reques
QWebEngineView * WebEngineTabView::createWindow(QWebEnginePage::WebWindowType type)
{
// signal Main window for a new view( @URL )
emit requestNewTab(page()->requestedUrl());
}
这是一个教育GPL浏览器应用程序
非常感谢您的任何帮助您是否看到了这是如何在 如果你仍然想委派这项工作,通知主窗口/应用程序/任何东西,你可能可以拦截点击和存储链接,但我不确定呼叫顺序,另外,如果请求的窗口只是一个“新选项卡”(没有url的空选项卡),你必须注意以下情况:
如果检查Qt源代码,您将看到在调用函数QWebEnginePage::createWindow来创建QWebEnginePage指针后,该指针将写入一些数据。看 对我来说,以下示例很有效:
class MyWebEnginePage : public QWebEnginePage
{
...
QWebEnginePage *createWindow(WebWindowType type) Q_DECL_OVERRIDE
{
QWebEnginePage *page = new QWebEnginePage();
connect(page, &QWebEnginePage::urlChanged, this, [this] (const QUrl &url) {
emit newPageUrlChanged(url);
}
return page;
}
signals:
void newPageUrlChanged(const QUrl &url);
};
class MyClass : public QObject
{
...
MyClass()
{
connect(m_pPage, &MyWebEnginePage::newPageUrlChanged, this, &MyClass::onNewPageUrlChanged);
}
private slots:
void onNewPageUrlChanged(const QUrl &url)
{
qDebug() << url; // new url will be printed here
}
private:
MyWebEnginePage *m_pPage;
}
MyWebEnginePage类:公共QWebEnginePage
{
...
QWebEnginePage*创建窗口(WebWindowType类型)Q_DECL_覆盖
{
QWebEnginePage*页面=新的QWebEnginePage();
连接(第页,&QWebEnginePage::urlChanged,this,[this](const-qrl&url){
发出newPageUrlChanged(url);
}
返回页面;
}
信号:
void newPageUrlChanged(const-QUrl&url);
};
类MyClass:公共QObject
{
...
MyClass()
{
连接(m_pPage,&MyWebEnginePage::newPageUrlChanged,this,&MyClass::onNewPageUrlChanged);
}
专用插槽:
void onNewPageUrlChanged(const-QUrl和url)
{
qDebug()
bool WebPage::acceptNavigationRequest(const QUrl & url, NavigationType type, bool isMainFrame)
{
switch( type )
{
case QWebEnginePage::NavigationTypeLinkClicked:
{
mLastClickedLink = url; //-- clear it in WebPage::createWindow
return true;
}
default:
return QWebEnginePage::acceptNavigationRequest( url, type, isMainFrame );
}
}
class MyWebEnginePage : public QWebEnginePage
{
...
QWebEnginePage *createWindow(WebWindowType type) Q_DECL_OVERRIDE
{
QWebEnginePage *page = new QWebEnginePage();
connect(page, &QWebEnginePage::urlChanged, this, [this] (const QUrl &url) {
emit newPageUrlChanged(url);
}
return page;
}
signals:
void newPageUrlChanged(const QUrl &url);
};
class MyClass : public QObject
{
...
MyClass()
{
connect(m_pPage, &MyWebEnginePage::newPageUrlChanged, this, &MyClass::onNewPageUrlChanged);
}
private slots:
void onNewPageUrlChanged(const QUrl &url)
{
qDebug() << url; // new url will be printed here
}
private:
MyWebEnginePage *m_pPage;
}