Qt6中使用QVideoWidget替代QCameraViewfinder显示摄像头画面问题咨询
Qt6 QCamera关联QVideoWidget实现预览的解决方案
Qt6的QtMultimedia框架并未遗漏相关接口,而是对整体架构做了重构,摄像头输出链路不再支持QCamera直接绑定QVideoWidget,需要通过QMediaCaptureSession中间层完成关联。
Qt6将各类音视频捕获场景的逻辑做了统一抽象,所有需要从硬件(摄像头、麦克风)或者屏幕获取媒体流的场景,都需要通过QMediaCaptureSession作为调度中枢,关联输入源和输出端,避免了旧版本中不同媒体源各自实现绑定逻辑的冗余问题,旧版本中的QCameraViewfinder组件也因此被移除,无需再单独使用。
实现代码示例
// 实例化必要对象 QCamera *camera = new QCamera(this); QMediaCaptureSession *captureSession = new QMediaCaptureSession(this); QVideoWidget *videoWidget = new QVideoWidget(this); // 绑定链路:摄像头 -> 捕获会话 -> 显示组件 captureSession->setCamera(camera); captureSession->setVideoOutput(videoWidget); // 启动摄像头即可看到实时预览 camera->start();
注意事项
- 同一时间一个
QMediaCaptureSession仅能绑定一个摄像头和一个视频输出,与旧版本的限制逻辑一致 - 如果需要同时拿到视频流做图像处理+界面预览,可以给
QMediaCaptureSession同时绑定QVideoSink和QVideoWidget,无需单独拆分流
内容的提问来源于stack exchange,提问作者rubenvb
相关产品推荐
相关产品推荐

