我有一个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:视频被切断了,但它没有提供任何对我有用的解决方案。当使用链时,我什么也看不见。
发布于 2018-03-21 16:38:34
使用下列指令时:
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();
}
...在下面的链接中,您可以找到完整的示例。
https://stackoverflow.com/questions/49410557
复制相似问题