如何在 QWebEngineView 或页面中嵌入自定义 QWidget?

Posted

技术标签:

【中文标题】如何在 QWebEngineView 或页面中嵌入自定义 QWidget?【英文标题】:How can I embed a custom QWidget in a QWebEngineView or page? 【发布时间】:2016-03-16 12:40:59 【问题描述】:

我知道可以使用已弃用的类 QtWebkit 来执行此操作,如 here 所示。

我想知道新的QtWebEngine 框架是否可以完成类似的工作?我找不到在网页(QWebEnginePage)中创建插件的方法。这与 Chromium 中的插件技术有关吗?

我目前正在探索使用 Qt 5.5 实现这一目标的可能性。

【问题讨论】:

我认为这是不可能的(与 Nicholas Smith 的推理相同),但也许您可以考虑以下替代方案之一:(a) QML 非常接近 html,也许改用 QML? (b) 您可以将 Qt 对象暴露给网页并通过 javascript 与之交互。然后你必须在 JS 中绘制小​​部件。 也谢谢你,乔治!您给出的第二个选项很有趣。但我认为在这种情况下我没有运气使用我们开发的许多现有 QWidget。我想使用浏览器为远程用户提供现有的 GUI。 HTML5 当然是一个不错的选择,但它需要在客户端进行新的开发。 如果您的小部件是非交互式的,您可以在屏幕外绘制它们并将它们作为图像显示给网络引擎。 【参考方案1】:

我无法以某种方式找到完全明确的答案,但是在porting guide 的末尾有一些东西表明它不再可能:

Qt WebEngine 使用 Skia 渲染网页,并且没有为此使用 QPainter 或 Qt。 HTML5 标准现在还提供了更好的替代方案,这些替代方案在 Qt WebKit 中引入本机控件插件时不可用。

没有QPainter 意味着在渲染期间无法绘制QWidget

【讨论】:

以上是关于如何在 QWebEngineView 或页面中嵌入自定义 QWidget?的主要内容,如果未能解决你的问题,请参考以下文章

“全屏不可用”将YouTube视频作为iframe嵌入QWebEngineView中

如何在使用 QWebEngineView 'loadFinished' 加载页面后立即更改 html 元素?

一个 QWebEnginePage 用于两个或多个 QWebEngineView

Linux + Qt : QWebEngineView + QWebChannel 与 JS 交互传递信息

在QWebEngineView中获取sslerrors信号

如何将 html 附加到我的 QWebEngineView