如何将本机窗口嵌入到QML组件中?

时间:2017-10-27 16:19:30

标签: c++ qt qml sdl pjsua2

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

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

我想将这个原生窗口嵌入到特定的QML组件中,假设是一个矩形。

这可能吗?

仅供参考:我使用的是MacOS Sierra 10.12.6,PJSIP 2.7,SDL后端和Qt 5.9.2。但我想让它适用于Windows和MacOS。

1 个答案:

答案 0 :(得分:2)

你做不到。您甚至无法在Qt快速项目中包含QWidget。

为了给你一些咀嚼,你可以看看https://github.com/vlc-qt/vlc-qt

他们提供QWidgets和QtQuick项目,允许使用VLC播放视频。

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

但是对于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)。