首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QVideoWidget不显示帧

QVideoWidget不显示帧
EN

Stack Overflow用户
提问于 2021-01-26 22:09:40
回答 1查看 310关注 0票数 0

我创建了一个QVideoWidget子类,以显示摄像机中的视频帧(Basler,Pylon )。简单地说,帧被转换为cv::Mat,然后用神经网络进行分析。在此之后,我对向QAbstractVideoSurface提供框架的VideoWidget进行了子类化。

当我试图在QVideoWidget中显示我的框架时,void paintEvent(QPaintEvent *event)函数是由update()repaint()触发的,但是小部件上没有显示任何内容。怎么了?

我检查了从管道开始,到结束,一切都是好的(帧包含数据,像素格式是OK,大小确定,我可以保存一个视频文件与实际帧在其中,等等)。我可以在UI中看到这个小部件。我真的怀疑我的paintEvent函数。

下面是我的paintEvent(QPaintEvent *event)函数:

代码语言:javascript
复制
// VideoWidget.h

protected:
    void paintEvent(QPaintEvent *event) override;
代码语言:javascript
复制
// VideoWidget.cpp

void VideoWidget::paintEvent(QPaintEvent *event) {
    QPainter p(this);
    p.drawImage(QRectF(m_targetRect), m_frameConv);
    QVideoWidget::paintEvent(event);
}

PS:我在MacOS 11上(在MacOSX上都不起作用),我使用的是CMake 3.17。

EN

回答 1

Stack Overflow用户

发布于 2021-01-27 13:21:59

您不需要为此对QVideoWidget进行子类处理。转换frame to image并将其显示在QVideoWidget::videoSurface()上,如文档所示

代码语言:javascript
复制
videoWidget = new QVideoWidget;
QVideoSurfaceFormat format(imgSize, QVideoFrame::Format_ARGB32);
videoWidget->videoSurface()->start(format);

QImage img = frameToImage(m_frameConv).convertToFormat(QImage::Format_ARGB32);
videoWidget->videoSurface()->present(img);
videoWidget->show();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65910004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档