QVideoWidget不显示问题

网上搜罗了各种方法,最后发现竟然是因为在主程序做了如下的设置

setAttribute(Qt::WA_TranslucentBackground, true);

把上述代码屏蔽后,就可以显示了。

Qt中,你可以通过QVideoWidget和OpenCV库结合,实现在应用程序中显示从摄像头捕获的视频流。以下是步骤: 1. **添加依赖**:首先确保你的Qt项目已经安装了Qt Video Framework(QtAV),如果没有,需要将其作为外部依赖或者在Qt Creator的项目设置中配置。 2. **初始化摄像头**:使用OpenCV库的`cv::VideoCapture`来打开摄像头设备,例如 `cv::VideoCapture cap(0);`,其中0通常代表默认摄像头。 3. **创建QVideoFrame**:每次从摄像头获取到一帧图像后,你需要将其转换成Qt的`QVideoFrame`。这可以通过`QImage`,然后转换为`QVideoFrame`,如下面的示例: ```cpp cv::Mat frame; cap.read(frame); if (frame.empty()) { qDebug() << "Failed to capture frame"; } else { QImage img(frame.data, frame.cols, frame.rows, QImage::Format_RGB888); img = img.rgbSwapped(); // OpenCV默认BGR, Qt需要RGB QVideoFrame videoFrame = qMakeVideoFrame(img); // 设置编码器为YUV420P,因为QVideoWidget支持此格式 if (!videoFrame.setPixelFormat(QVideoFrame::Format_YUV420P)) { qWarning() << "Failed to set pixel format"; } } ``` 4. **显示视频**:将`QVideoFrame`发送给`QVideoWidget`进行显示: ```cpp auto result = widget->lock(); if (result) { result->append(videoFrame); widget->unlockAndDisplay(); } else { qDebug() << "Failed to append frame"; } ``` 这里`widget`是你的`QVideoWidget`实例。 5. **循环处理**:将上述代码放在一个无限循环中,持续更新显示窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值