私が Linux 用に作成しているアプリケーションでは、ネイティブ ウィンドウ (libmpv 経由でレンダリングされたビデオ) に支えられた QWidget があり、その上に別の (透明な) QWidget を重ねて表示します。これは、ビデオの上に描画するために使用されます。
QStackedLayout (StackAll モードを使用) を含む QWidget に両方を配置しようとしましたが、コンテナがそのすべての子 (オーバーレイとビデオ ウィジェット) はネイティブ ウィンドウとして作成されます。
オーバーレイ ウィジェットが存在しない場合、ネイティブ ウィンドウは適切に更新されるため、問題はありません。オーバーレイ ウィジェット自体にも問題はありません。予想どおり、ビデオ ウィジェット領域を部分的に覆うだけで表示されます。
以前、Gtk+ を使用して似たようなことを書きましたが、gdk_window_set_composited を使用してこれを解決しました。これにより、ビデオ ウィジェットがオフスクリーンでレンダリングされ、子が更新されるたびに親ウィジェットに通知され、子コンテンツ自体の描画を処理できるようになります。しかし、Qtで同等のものを見つけることができなかったので、これを達成する方法に途方に暮れています。
QOpenGLWidget の使用はオプションではありません。libmpv には、現在のワークスペースが再生中に切り替わるとビデオのレンダリングが遅くなるという問題があるためです。