QVideoWidget 不能很好地调整大小

QVideoWidget doesn't resize well

我有一个 Qt 应用程序,它可以简单地从默认网络摄像头捕获并将其显示在 QVideoWidget 上。在 ui 中,我有一个简单的 MainWindow,在 VerticalLayout 中有一个 QGraphicsView:

ui设计

我的mainwindow.cpp======================================= ======

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_viewfinder = new QVideoWidget(ui->captureView);
    m_camera = new QCamera(QCameraInfo::defaultCamera());
    m_camera->setViewfinder(m_viewfinder);

    m_camera->start();
}

MainWindow::~MainWindow()
{
    m_camera->stop();
    delete m_viewfinder;
    delete m_camera;
    delete ui;
}

当我执行此操作时,我得到了应用程序 运行,但视频内容不会根据主窗口大小进行缩放。示例:

当我启动应用程序时

缩小主窗口

正在调整主窗口

有什么方法可以使视频内容调整好大小并适合可用区域吗? 我看过这个答案:QVideoWidget: Video is cut off,但它没有提供任何适合我的解决方案。当使用 QGraphicsView-QGraphicsScene-QGraphicsVideoItem 链时,我什么也看不到。

当您使用以下指令时:

m_viewfinder = new QVideoWidget(ui->captureView);

您将m_viewfinder设置为captureView的父级,因此m_viewfinder的位置将相对于captureView,但这并不表示它将与父级大小相同。

最简单的方法之一是使用布局。另外,不需要创建QGraphicsWidgetQVBoxLayout,所以我建议你删除它并获得默认建立的设计:

然后我们建立一个layout放在centralWidget里面,在这个layout里面我们添加QVideoWidget.

...
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_viewfinder = new QVideoWidget;
    QVBoxLayout *lay = new QVBoxLayout(ui->centralWidget);
    lay->addWidget(m_viewfinder);
    m_camera = new QCamera(QCameraInfo::defaultCamera());
    m_camera->setViewfinder(m_viewfinder);

    m_camera->start();
}
...

在下面link你可以找到完整的例子。