[英]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.