gpt4 book ai didi

c++ - 一个 QWebEnginePage 用于两个或多个 QWebEngineView

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:38 26 4
gpt4 key购买 nike

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

我希望此页面显示在两个 QWebEngineView 中,但看起来 Qt 不允许这样做。

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

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

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();

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

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

最佳答案

QWebEnginePage 不能连接到两个 QWebEngineView

当您查看 Qt sources 时,您将很容易理解当您两次调用 setPage 时会发生什么。 ,请参阅那里的 setPage 函数。第二次它只是与第一个 View 断开连接。

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
}

关于c++ - 一个 QWebEnginePage 用于两个或多个 QWebEngineView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com