QVideoWidget 不能很好地调整大小

Posted

技术标签:

【中文标题】QVideoWidget 不能很好地调整大小【英文标题】:QVideoWidget doesn't resize well 【发布时间】:2018-03-21 15:36:31 【问题描述】:

我有一个 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 链时,我什么都看不到。

【问题讨论】:

【参考方案1】:

当您使用以下指令时:

m_viewfinder = new QVideoWidget(ui->captureView);

您将m_viewfinder 的父级设置为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();

...

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

【讨论】:

答案很简单,视频不能一直是底层QWidget的100%宽高。视频保持特定比例,会出现水平或垂直空间。 @user3606329 小部件具有正确的宽度和高度,视频没有。这无法更改,因为这取决于文件或相机的分辨率。 @user3606329 解释一下为什么你告诉我疯狂的投票者? @eyllanesc :你不是,我现在把它叫回来并赞成你的答案。问候。 @eyllanesc 评论已被删除,我一直很好。

以上是关于QVideoWidget 不能很好地调整大小的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C++ 中的向量不会自动调整大小

Redshift卡在调整大小模式?

用动画调整 UIView 的大小,子视图不会动画

重新打开时 JQuery UI 对话框没有正确调整大小?

我不能用 QPainter 绘制 QVideoWidget

隐藏状态栏时如何强制windowSoftInputMode调整大小