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
,但这并不表示它将与父级相同。
最简单的方法之一是使用布局。另外,QGraphicsWidget
或QVBoxLayout
不是必须创建的,所以我建议您删除它并获取默认建立的设计:
然后我们建立一个布局,放置在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 不能很好地调整大小的主要内容,如果未能解决你的问题,请参考以下文章