好好弯曲我的大脑试图理解QWebEngine。
我理解实现虚函数的概念,但我不确定如何获取用户点击的url是页面或视图请求的newTab / newWindow链接。
QWebEngineView * WebEngineTabView::createWindow(QWebEnginePage::WebWindowType type)
{
// signal Main window for a new view( @URL )
emit requestNewTab(page()->requestedUrl());
}
这适用于教育GPL浏览器应用 任何帮助非常感谢
答案 0 :(得分:2)
您是否在demobrowser example看到了这是怎么做的?
QWebEnginePage *WebPage::createWindow(QWebEnginePage::WebWindowType type)
{
if (type == QWebEnginePage::WebBrowserTab) {
return mainWindow()->tabWidget()->newTab()->page();
} else if (type == QWebEnginePage::WebBrowserWindow) {
BrowserApplication::instance()->newMainWindow();
BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow();
return mainWindow->currentTab()->page();
} else {
PopupWindow *popup = new PopupWindow(profile());
popup->setAttribute(Qt::WA_DeleteOnClose);
popup->show();
return popup->page();
}
}
如果你仍想委托这项工作,通知主窗口/ app /等等,你可能可以截取点击和存储链接,但我不确定通话顺序,另外你必须注意案件的时候请求窗口只是一个"新标签" (没有网址的空标签):
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 );
}
}
答案 1 :(得分:1)
如果检查Qt源代码,您将看到在调用函数QWebEnginePage :: createWindow创建QWebEnginePage指针之后,该指针将写入一些数据。参见https://code.qt.io/cgit/qt/qtwebengine.git/tree/src/webenginewidgets/api/qwebenginepage.cpp?h=5.9#n404
对我来说,以下示例有效:
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;
}
希望这会有所帮助