QVideoWidget изменяет размер не очень хорошо

У меня есть приложение Qt, которое просто захватывает с веб-камеры по умолчанию и показывает его на QVideoWidget. В пользовательском интерфейсе у меня есть простое MainWindow с QGraphicsView внутри VerticalLayout:

дизайн интерфейса

Мой 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: видео обрезано, но он не предлагает никакого решения, которое работает для меня. При использовании цепочки QGraphicsView-QGraphicsScene-QGraphicsVideoItem я вообще ничего не вижу.

0

Решение

При использовании следующей инструкции:

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();
}
...

В следующих ссылка на сайт Вы можете найти полный пример.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]