簡體   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