简体   繁体   中英

QVideoWidget doesn't resize well

I have a Qt application which simply captures from the default webcam and shows it on a QVideoWidget. In the ui, I have a simple MainWindow with a QGraphicsView inside a VerticalLayout:

ui design

My 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;
}

When I execute this, I get the application running, but the video contents do not scale according to the mainwindow size. Examples:

When I start the application

Resizing mainwindow down

Resizing mainwindow up

Is there some way to make the video content resize well and fit the available area? I have seen this answer: QVideoWidget: Video is cut off , but it doesn't offer any solution that works for me. When use the QGraphicsView-QGraphicsScene-QGraphicsVideoItem chain, I see nothing at all.

When you use the following instruction:

m_viewfinder = new QVideoWidget(ui->captureView);

You are setting as the parent of m_viewfinder to captureView , so the positions of m_viewfinder will be relative to captureView , but this does not indicate that it will be the same size as the parent.

One of the easiest ways to do this is to use a layout. Also, it is not necessary to create the QGraphicsWidget or the QVBoxLayout , so I recommend you to delete it and get the design as it was established by default:

在此处输入图片说明

and then we establish a layout that is placed in the centralWidget , and in this layout we add the 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();
}
...

In the following link you can find the complete example.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM