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