У меня есть приложение 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 я вообще ничего не вижу.
При использовании следующей инструкции:
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();
}
...
В следующих ссылка на сайт Вы можете найти полный пример.
Других решений пока нет …