我正在Ubuntu16.04上尝试使用Qt 5.10 QMultimedia来播放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();
}
发布于 2018-10-03 01:03:41
在QGraphicsView
2类坐标中,第一种是像素的物理坐标,另一种是用项目处理的坐标,即QGraphicsView
作为一个小部件的坐标系与场景的坐标系不同。为了让你理解,我会用下面的例子:假设你有一部相机,你正在录制一部电影,现实世界有一个坐标系,但是相机有另一个不匹配的坐标系,但是有一个与它们有关的转换,比如一个演员走近相机,他的身体高度没有变化,但是如果它改变了,从摄像机上看,它的高度没有变化。在前面的例子中,照相机是QGraphicView
,世界是QGraphicScene
,参与者和元素是项目。所以,即使我买了一台分辨率更高的相机,演员也不会成长,这就是你所做的。可以做的一件事是调整相机的焦距,这样只有演员才能看到,这和使用fitInView()
是一样的,但是当场景的大小发生变化时,你应该这样做,以便调整自己,所以我们必须使用QGraphicScene
的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();
}
https://stackoverflow.com/questions/52618136
复制相似问题