【问题标题】:QtWebEngine rendering native Qt widgets in DOM?QtWebEngine 在 DOM 中渲染原生 Qt 小部件?
【发布时间】:2015-04-24 00:55:36
【问题描述】:

我希望用 HTML 重写一个 Qt 应用程序,并让 QtWebEngine 为我呈现它。我完全理解 HTML 页面会在 QtWebEngine 中显示和运行。

但是,我真正感兴趣并且无法找到有关文档的一件事(如果我在错误的地方寻找,请道歉)是知道 QtWebEngine 是否允许将 DOM 的元素“交换”为原生Qt 小部件。例如,<div id="myWidget"> 真的可以是 QOpenGLWidget 吗?这完全荒谬吗?

例如,我希望能够做到:

<body>
<h1>Example</h1>
<div id="myWidget">
</div>
<p>Some text</p>
</body>

神奇地让我的 QOpenGLWidget 在 DOM 中呈现在“myWidget”的位置。我的 HTML 只能由 QtWebEngine 呈现,不一定由其他浏览器呈现,所以如果有一个解决方案意味着它不能在 Chrome/Firefox/IE 中工作,那对我来说绝对没问题。

...或者我是否必须使用在 QtWebEngine 实例中运行的 javascript 来找出“myWidget”的位置并自己在该位置绘制 QOpenGLWidget 像素数据?我真的不想走这条路,因为它不允许在“myWidget”顶部使用 HTML 对话框之类的东西。

我非常感谢这里的任何信息。一个例子(如果这可能的话)会很棒。非常感谢。

【问题讨论】:

    标签: qt qtwebengine


    【解决方案1】:

    QtWebKit 的解决方案:

    您需要继承 QWebPluginFactory 并在其 create 方法中创建您的小部件。 然后您可以使用&lt;object&gt; 标签将您的小部件嵌入到 HTML 中:

    <object type="application/x-qt-plugin" name="myWdget" classid="QOpenGLWidget">
    </object>
    

    See example here

    And another example here

    ...对于新的QtWebEngine 似乎不再有效。

    【讨论】:

    • 谢谢阿奇!不幸的是,这些似乎与 QtWebEngine 不兼容 - 请参阅此处的“不可用的 Qt WebKit API”:qt-project.org/wiki/…
    • 哦,对了,我的错。与 WebKit 相比,新 QtWebEngine 的可扩展性非常有限。您是否可以使用 QtWebKit 切换回来?
    • 我一定会进行实验 - 非常感谢您的回答。至少突出显示了我所追求的 Qt 是可能的。
    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2020-11-04
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多