Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Qt 5.10 QGraphicsView无法将Qgraphicscene缩放到全屏_Linux_Qt_Qt5_Qtmultimedia - Fatal编程技术网

Linux Qt 5.10 QGraphicsView无法将Qgraphicscene缩放到全屏

Linux Qt 5.10 QGraphicsView无法将Qgraphicscene缩放到全屏,linux,qt,qt5,qtmultimedia,Linux,Qt,Qt5,Qtmultimedia,我正在Ubuntu 16.04上试用Qt5.10qMultimedia来播放Gstreamer录制的视频。应用程序的主要部分如下所示。调用showMaximized()后,我似乎无法将视频缩放到整个Qt屏幕 屏幕中间显示的小视频如下(我想它缩放到整个窗口): 守则: #include "mainwindow.h" #include <QVideoWidget> #include <QGraphicsView> #include <QtMultimedia>

我正在Ubuntu 16.04上试用Qt5.10qMultimedia来播放Gstreamer录制的视频。应用程序的主要部分如下所示。调用showMaximized()后,我似乎无法将视频缩放到整个Qt屏幕

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

守则:

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

}
#包括“mainwindow.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父窗口)
{
QGraphicsView*graphicsView=新的QGraphicsView;
Qgraphicscene*场景=新的Qgraphicscene;
QGraphicsVideoItem*item=新的QGraphicsVideoItem;
//graphicsView->setGeometry(0,0640480);//显示一个大小…尝试#1
graphicsView->setGeometry(0,0640*2480*2);//这对视频大小没有影响?
图形视图->设置场景(场景);
graphicsView->scene()->addItem(项目);
graphicsView->SetRenderInts(QPaint::抗锯齿);
场景->设置场景竖立(场景->itemsBoundingRect());
图形视图->设置场景竖立(场景->场景竖立());
//媒体播放器
player=新的QMediaPlayer;
播放器->设置视频输出(项目);
player->setMedia(QUrl::fromLocalFile(“/tmp/test.mkv”);
player->play();
qDebug()显示全屏();
图形视图->显示最大化();
}

QGraphicsView
中,处理两种类型的坐标,第一种是像素的物理坐标,另一种是与项目一起处理的坐标,即作为小部件的
QGraphicsView
的坐标系不同于场景的坐标系。为了让你理解,我将使用以下示例:假设你有一个相机,你正在录制一部电影,现实世界有一个坐标系,但相机也有另一个不匹配的坐标系,但有一个特定的变换将它们联系起来,例如一个演员靠近相机,他的身体高度没有改变,但从相机上看的高度,如果它改变了。在上一个示例中,摄影机是
QGraphicView
,世界是
QGraphicScene
,演员和元素是项目。所以,即使我买了一台分辨率更高的相机,演员也不会成长,这就是你所做的。可以做的一件事是调整相机的焦距,以便只有演员才能看到,这与使用
fitInView()
相同,但当场景大小改变时,您应该这样做,以便它能够自行调整,因此我们必须使用
qgraphicsecene
sceneRectChanged
信号:

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