代码之家  ›  专栏  ›  技术社区  ›  mahesh

QVideoWidget无法很好地调整大小

  •  0
  • mahesh  · 技术社区  · 8 年前

    我有一个Qt应用程序,它只需从默认的网络摄像头中捕获并在QVideoWidget上显示。在ui中,我有一个简单的主窗口,在垂直布局中有一个QGraphicsView:

    ui设计

    我的主窗口。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 qgraphicscene QGraphicsVideoItem链时,我什么也看不到。

    1 回复  |  直到 8 年前
        1
  •  1
  •   eyllanesc    8 年前

    使用以下说明时:

    m_viewfinder = new QVideoWidget(ui->captureView);
    

    您正在设置为的父级 m_viewfinder captureView ,因此 m\U取景器 将相对于 captureView ,但这并不表示它将与父级大小相同。

    最简单的方法之一是使用布局。此外,无需创建 QGraphicsWidget 或者 QVBoxLayout ,因此我建议您将其删除,并按默认设置获取设计:

    enter image description here

    然后我们建立一个布局,放置在 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();
    }
    ...
    

    在以下内容中 link 您可以找到完整的示例。

    推荐文章