【问题标题】:How to embed a native window into QML component?如何将本机窗口嵌入到 QML 组件中?
【发布时间】:2017-10-27 16:19:29
【问题描述】:

我正在开发一个跨平台的 SIP 应用程序,基于 PJSUA2 作为核心,QtQuick 作为 GUI。

PJSUA2 提供了一个 API 用于显示用户的捕获设备以及远程方的视频流。这样的 API 公开了给定视频的本机窗口处理程序。本机窗口处理程序是特定于平台的(Windows 上的 HWND、Mac 上的 NSView* 等)。

我想把这个原生窗口嵌入到一个特定的 QML 组件中,比如说一个 Rectangle。

这可能吗?

仅供参考:我正在使用带有 SDL 后端和 Qt 5.9.2 的 MacOS Sierra 10.12.6、PJSIP 2.7。但我想让它同时在 Windows 和 MacOS 上运行。

【问题讨论】:

    标签: c++ qt qml sdl pjsua2


    【解决方案1】:

    你不能。你甚至不能在 Qt Quick Item 中包含 QWidget。

    为了让你吃点东西,你可以看看https://github.com/vlc-qt/vlc-qt

    他们提供允许使用 VLC 播放视频的 QWidgets 和 QtQuick Items。

    他们为小部件 (https://github.com/vlc-qt/vlc-qt/blob/master/src/core/MediaPlayer.cpp#L217) 使用窗口句柄 (HWND)。

    但对于 Qt Quick,他们将每个视频帧复制到 QSGNode(https://github.com/vlc-qt/vlc-qt/blob/master/src/core/VideoStream.cpp#L111https://github.com/vlc-qt/vlc-qt/blob/master/src/qml/rendering/VideoNode.cpp#L32)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-30
      • 2015-10-23
      • 2018-11-04
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多