繁体   English   中英

QVideoWidget 不显示帧

[英]QVideoWidget doesn't display frames

我创建了QVideoWidget的一个子类,以便显示来自相机的视频帧(Basler、Pylon C++ API)。 简而言之,帧被转换为cv::Mat ,然后由神经网络进行分析。 之后,我将一个QAbstractVideoSurface子类化,将帧呈现给 VideoWidget。

当我尝试在 QVideoWidget 中显示我的帧时,function void paintEvent(QPaintEvent *event)update()repaint()触发,但小部件上没有显示任何内容。 怎么了?

我从管道开始检查到最后,一切正常(帧包含数据,像素格式正常,大小正常,我可以保存一个包含实际帧的视频文件,等等)。 我可以在 UI 中看到小部件。 我真的怀疑我的paintEvent function。

这是我的paintEvent(QPaintEvent *event) function:

// VideoWidget.h

protected:
    void paintEvent(QPaintEvent *event) override;

// 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。

您不需要为此QVideoWidget 帧转换为图像并将其呈现在QVideoWidget::videoSurface()上,如文档所述

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM