Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QWebEngineView创建窗口_Qt_Qtwebengine - Fatal编程技术网

Qt QWebEngineView创建窗口

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

好吧,弯曲我的大脑试图理解QWebEngine

我理解实现虚拟功能的概念,但我不确定如何获取用户单击的url,即页面或视图请求的newTab/newWindow链接

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;
}