我有一个Qt应用程序,只需从默认网络摄像头捕获并在QVideoWidget上显示。在ui中,我有一个简单的MainWindow,在VerticalLayout中有一个QGraphicsView:
ui design
我的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链时,我什么也看不见。
答案 0 :(得分: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();
}
...
。
VAT | Email1 | Email2
000 | a@a.it | b@b.it
000 | a@a.it | -
000 | a@a.it | c@c.it
000 | - | d@d.it
在以下link中,您可以找到完整的示例。