首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个或多个QWebEngineView对应一个QWebEnginePage

两个或多个QWebEngineView对应一个QWebEnginePage
EN

Stack Overflow用户
提问于 2016-09-27 18:56:24
回答 2查看 1.9K关注 0票数 3

我有一个加载了一些url (例如https://www.google.com)的QWebEnginePage实例

我希望这个页面在两个QWebEngineViews中显示,但它看起来Qt不允许。

一旦我在一个视图上调用setPage,另一个视图就会停止呈现页面。看起来这是一个所有权或类似的问题,但我在Qt文档中没有看到任何关于这方面的信息。

还有其他人遇到过这样的问题吗?

代码语言:javascript
复制
auto p = new QWebEnginePage();
p->load(QUrl("https://www.google.com"));

auto w1 = new QWebEngineView();
auto w2 = new QWebEngineView();

w1->setPage(p);
w2->setPage(p);

w1->show();
w2->show();

我希望两个视图都显示相同的页面,但只有w2才能显示。如果您稍后调用w1->setPage(p) -页面将显示在w1上,并从w2中消失。

UPD。我只是想发布一下结论。-QWebEnginePage的view()方法证明了一对一的关系。- setPage源代码清楚地显示“第二次它只是与第一个视图断开连接。”-“如果当前页面是web视图的子级,它将被删除。”-根本没有回答我的问题。我的页面不是web视图的子视图,也不会被删除,只是不会像我预期的那样同时呈现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-27 20:05:37

QWebEnginePage无法连接到两个QWebEngineView%s。

当您查看Qt sources时,您将很容易理解当您调用setPage两次时会发生什么,请参见setPage函数。第二次,它只是与第一个视图断开。

代码语言:javascript
复制
void QWebEngineView::setPage(QWebEnginePage* page)
{
    QWebEngineViewPrivate::bind(this, page);
}

void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page)
{
    if (view && page == view->d_func()->page)
        return;

    if (page) {
        // Un-bind page from its current view.
        if (QWebEngineView *oldView = page->d_func()->view) {
            page->disconnect(oldView);
            oldView->d_func()->page = 0;
        }
        page->d_func()->view = view;
        page->d_func()->adapter->reattachRWHV();
    }

    if (view) {
        // Un-bind view from its current page.
        if (QWebEnginePage *oldPage = view->d_func()->page) {
            oldPage->disconnect(view);
            oldPage->d_func()->view = 0;
            oldPage->d_func()->adapter->reattachRWHV();
            if (oldPage->parent() == view)
                delete oldPage;
        }
        view->d_func()->page = page;
    }

    // skipped
}
票数 2
EN

Stack Overflow用户

发布于 2016-09-27 20:01:34

QWebEnginePage有一个QWebEnginePage::view方法,它返回一个指向当前显示页面的QWidget的指针。因此,根据定义,它只能有一个视图,尽管视图并不拥有页面的所有权(其中所有权始终是一对一的关系)

我建议创建两个QWebEnginePage实例,并将信号连接到另一个页面的相应插槽(或调用相应的非插槽设置器的lambda)。像scrollPositionChanged这样的一些可能没有相应的设置器,所以您可能不太可能实现完全同步。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39722847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档