0

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

用户界面设计

我的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 链时,我什么也看不到。

4

1 回答 1

1

当您使用以下指令时:

m_viewfinder = new QVideoWidget(ui->captureView);

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

最简单的方法之一是使用布局。此外,没有必要创建QGraphicsWidgetQVBoxLayout,因此我建议您删除它并获取默认建立的设计:

在此处输入图像描述

然后我们建立一个放置在 中的centralWidget布局,并在这个布局中添加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();
}
...

在以下链接中,您可以找到完整的示例。

于 2018-03-21T16:38:34.620 回答