首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QT5.10 QGraphicsView不能将QGraphicsScene缩放到全屏

QT5.10 QGraphicsView不能将QGraphicsScene缩放到全屏
EN

Stack Overflow用户
提问于 2018-10-03 00:30:27
回答 1查看 947关注 0票数 1

我正在Ubuntu16.04上尝试使用Qt 5.10 QMultimedia来播放Gstreamer录制的视频。应用程序的内容如下所示。在调用showMaximized()之后,我似乎无法将视频扩展到整个Qt屏幕。

屏幕中央显示的小视频如下(我希望它能缩放到整个窗口):

“守则”:

代码语言:javascript
运行
复制
#include "mainwindow.h"

#include <QVideoWidget>
#include <QGraphicsView>
#include <QtMultimedia>
#include <QGraphicsVideoItem>
#include <unistd.h>
#include <QTimer>
#include <QDebug>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{

    QGraphicsView * graphicsView = new QGraphicsView;
    QGraphicsScene * scene = new QGraphicsScene;
    QGraphicsVideoItem *item = new QGraphicsVideoItem;

    //graphicsView->setGeometry(0,0,640,480); // One size shows up... attempt #1
    graphicsView->setGeometry(0,0,640*2,480*2); // This does nothing to video size?

    graphicsView->setScene(scene);
    graphicsView->scene()->addItem(item);
    graphicsView->setRenderHints( QPainter::Antialiasing );

    scene->setSceneRect(scene->itemsBoundingRect());
    graphicsView->setSceneRect(scene->sceneRect());

    // Media Player
    player = new QMediaPlayer;
    player->setVideoOutput(item);
    player->setMedia(QUrl::fromLocalFile("/tmp/test.mkv"));
    player->play();

    qDebug() << "Started Playing";

    // Show full screen
    //graphicsView->showFullScreen();
    graphicsView->showMaximized();

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 01:03:41

QGraphicsView 2类坐标中,第一种是像素的物理坐标,另一种是用项目处理的坐标,即QGraphicsView作为一个小部件的坐标系与场景的坐标系不同。为了让你理解,我会用下面的例子:假设你有一部相机,你正在录制一部电影,现实世界有一个坐标系,但是相机有另一个不匹配的坐标系,但是有一个与它们有关的转换,比如一个演员走近相机,他的身体高度没有变化,但是如果它改变了,从摄像机上看,它的高度没有变化。在前面的例子中,照相机是QGraphicView,世界是QGraphicScene,参与者和元素是项目。所以,即使我买了一台分辨率更高的相机,演员也不会成长,这就是你所做的。可以做的一件事是调整相机的焦距,这样只有演员才能看到,这和使用fitInView()是一样的,但是当场景的大小发生变化时,你应该这样做,以便调整自己,所以我们必须使用QGraphicScenesceneRectChanged信号:

代码语言:javascript
运行
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QGraphicsView * graphicsView = new QGraphicsView;
    setCentralWidget(graphicsView);
    QGraphicsScene * scene = new QGraphicsScene(graphicsView);
    QGraphicsVideoItem *item = new QGraphicsVideoItem;

    // Media Player
    player = new QMediaPlayer;
    player->setVideoOutput(item);
    player->setMedia(QUrl::fromLocalFile("/tmp/test.mp4"));
    player->play();

    graphicsView->setScene(scene);
    graphicsView->scene()->addItem(item);
    graphicsView->setRenderHints( QPainter::Antialiasing );

    connect(scene, &QGraphicsScene::sceneRectChanged,
            [graphicsView, item](const QRectF &)
    {
        graphicsView->fitInView(item);;
    });

    showMaximized();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52618136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档