gpt4 book ai didi

c++ - 如何将 QVideoWidget 设置为全屏并在全屏小部件中设置音量 slider ?

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:57 26 4
gpt4 key购买 nike

我正在开发一个简单的视频循环应用程序,想知道是否有办法将音量 slider 控件添加到 QVideoWidget 的全屏模式。

我希望应用程序在启动时显示一个小的QVideoWidget。然后在双击视频小部件后,我希望视频以全屏显示并带有一个额外的音量 slider 。

目前我有一个基于 QMultimedia 示例的代码,如下所示:

videowidget.h

#ifndef VIDEOWIDGET_H
#define VIDEOWIDGET_H

#include <QVideoWidget>

class VideoWidget : public QVideoWidget
{
Q_OBJECT
public:
VideoWidget(QWidget *parent = 0);

protected:
void keyPressEvent(QKeyEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
};

#endif // VIDEOWIDGET_H

videowidget.cpp

void VideoWidget::mouseDoubleClickEvent(QMouseEvent *event)
{
setFullScreen(!isFullScreen());
event->accept();
}

我能想到的一个解决方案是创建一个基本小部件来绘制另一个视频小部件和一个 slider 并将其加载到双击事件中,但我很难实现它。我不知道如何将媒体播放器的当前播放状态转移到新的视频小部件。

最佳答案

#include <QApplication>
#include <QMouseEvent>
#include <QVideoWidget>
#include <QSlider>
#include <QMediaPlayer>
#include <QFileDialog>

/**
* @brief The VideoWidget class
*
* VideoWidget contains QSlider & QVideoWidget
*/
class VideoWidget : public QWidget
{
Q_OBJECT
QVideoWidget* videoWidget;
QSlider* slider;
public:
VideoWidget() :
videoWidget(new QVideoWidget(this)),
slider(new QSlider(Qt::Horizontal, this))
{
slider->hide();
slider->move(10, 10); // Put slider where you want.
slider->setRange(0, 100);

const QMediaContent meida(QFileDialog::getOpenFileUrl());
QMediaPlayer* player = new QMediaPlayer(this);
player->setVideoOutput(videoWidget);
player->setMedia(meida);
player->play();

slider->setValue(player->volume());
connect(slider, &QSlider::valueChanged, player, &QMediaPlayer::setVolume);
}
virtual ~VideoWidget() {}
protected:
/**
* @brief changeEvent
* @param event
*
* Listen to window state change event,
* and show the slider only when the state is WindowFullScreen.
*/
void changeEvent(QEvent* event) {
if(event->type() == QEvent::WindowStateChange)
slider->setVisible(windowState() == Qt::WindowFullScreen);
QWidget::changeEvent(event);
}

/**
* @brief resizeEvent
* @param event
*
* Make videoWidget fill the parent widget.
*/
void resizeEvent(QResizeEvent* event) {
videoWidget->resize(size());
event->accept();
}

void mouseDoubleClickEvent(QMouseEvent *event) {
if(!isFullScreen())
showFullScreen();
else
showNormal();
event->accept();
}
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

VideoWidget w;
w.resize(500, 400);
w.show();

return a.exec();
}

#include "main.moc"

关于c++ - 如何将 QVideoWidget 设置为全屏并在全屏小部件中设置音量 slider ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52146968/

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