在 QGraphicScene 中动态调整视频大小

Posted

技术标签:

【中文标题】在 QGraphicScene 中动态调整视频大小【英文标题】:Dynamically Resize Video in a QGraphicScene 【发布时间】:2015-10-08 18:50:32 【问题描述】:

所以我有一个 QMediaPlayer 播放视频,它包含在 QGraphicsVideoItem 内,在 QGraphicsScene 内。我在 QGraphicsScene 中也有文本。 QGraphicsView 调整为文本的大小,但不是视频的大小,所以我只能看到视频的左上角。

有没有办法让视频拉伸以填满可用空间?有没有办法让视频在可用空间居中,而不是卡在左上角?

下面是我当前的代码。

videoWidget = new VideoWidget();
QGraphicsView* graphicsView = new QGraphicsView(videoWidget);
QGraphicsScene* scene = new QGraphicsScene(graphicsView);
QGraphicsVideoItem* videoItem = new QGraphicsVideoItem();
QGraphicsTextItem* text = new QGraphicsTextItem("Lorem ipsum ");

text->setDefaultTextColor(Qt::white);
graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

player = new QMediaPlayer();
player->setVideoOutput(videoItem);

graphicsView->setScene(scene);
graphicsView->scene()->addItem(videoItem);
graphicsView->scene()->addItem(text);

playlist = new QMediaPlaylist();
playlist->setPlaybackMode(QMediaPlaylist::Loop);
player->setPlaylist(playlist);

playlistModel = new PlaylistModel();
playlistModel->setPlaylist(playlist);`

【问题讨论】:

【参考方案1】:

所以我想出了一种调整视频大小的方法,基本上我在 videoWidget 中实例化了 resizeEvent 以便它可以更新图形项的大小。

void VideoWidget::resizeEvent(QResizeEvent *event)

  QSize size = event->size();

  if(graphicsView != NULL)
    //Changes the size of the area the video can display in
      graphicsView->setMinimumSize(size);
      graphicsView->setMaximumSize(size);
    
  if(graphicsVideoItem != NULL)
    //This changes the size/pos of the video itself
      graphicsVideoItem->setSize(size);
    
  QVideoWidget::resizeEvent(event);

在哪里class VideoWidget : public QVideoWidget

【讨论】:

以上是关于在 QGraphicScene 中动态调整视频大小的主要内容,如果未能解决你的问题,请参考以下文章

在 PyQt 中动态调整视频大小

Swift - 如何根据视频播放器框架的大小动态调整 UIView 的大小

动态更改 HTML5 视频分辨率的最佳方法

如何根据内容动态调整 Twitter Bootstrap 模式的大小

使 HTML5 视频适合父元素大小

Swift - 在标签中动态调整大小后动态调整视图大小