gpt4 book ai didi

linux - Qt 5.10 QGraphicsView 无法将 QGraphicsScene 缩放到全屏

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:01 26 4
gpt4 key购买 nike

我正在 Ubuntu 16.04 上尝试使用 Qt 5.10 QMultimedia 播放 Gstreamer 录制的视频。应用程序的内容如下所示。在我调用 showMaximized() 后,我似乎无法让视频缩放到整个 Qt 屏幕。

屏幕中间显示的小视频如下图(我想让它缩放到整个窗口):

enter image description here

代码:

#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();

}

最佳答案

QGraphicsView中处理了2种坐标,第一种是像素的物理坐标,另一种是用item处理的,即QGraphicsView作为widget,与场景的坐标系不同。为了便于理解,我将使用以下示例:假设您有一台相机并且正在录制电影,现实世界有一个坐标系,但相机也有另一个不匹配但有一定坐标系的坐标系将它们联系起来的转换,例如 Actor 接近相机,他的物理高度没有改变,但如果它发生了变化,从相机看起来的高度。在前面的示例中,相机是 QGraphicView,世界是 QGraphicScene, Actor 和元素是项目。所以即使我买了一台分辨率更高的相机, Actor 也不会长大,而这就是你所做的。可以做的一件事是调整相机的焦点,以便只有 Actor 可以看到,这与使用 fitInView() 相同,但这是当场景大小发生变化时你应该做的以便它自行调整,所以我们必须使用 QGraphicScenesceneRectChanged 信号:

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

关于linux - Qt 5.10 QGraphicsView 无法将 QGraphicsScene 缩放到全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52618136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com