如何将QVideoWidget设置为全屏并在全屏小部件中具有音量滑块?

洛文

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

我希望该应用在启动时显示一个小的QVideoWidget然后,双击视频窗口小部件后,我希望视频以附加的音量滑块全屏显示。

目前,我有一个基于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();
}

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

JustWe
#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"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有高度的自定义操作栏如何将背景设置为全屏

如何将 BottomSheetDialogFragment 设置为全屏?

如何将墙纸设置为全屏主屏幕

如何将Google Chrome设置为全屏自动打开

如何让小部件在 Qt 中永远不会进入全屏模式?

如何将图像设置为小部件上的按钮?

全屏小部件

如何将按钮的属性设置为从Qt中的小部件可见

将值设置为jquery小部件滑块

颤抖如何将大型有状态小部件重构为较小的小部件

如何将视频高度设置为全屏减去标题的大小?

如何在Awesome WM中具有音量控制/小部件?

WordPress中的全屏滑块

如何将Moviepy调整为全屏大小?

如何将Webview调整为全屏显示?

如何使用mabplotlib中的小部件滑块设置时间间隔

如何在单击时将组件扩展为具有动画的全屏宽度和高度

如何以编程方式将NSWindow设置为全屏?

如何以编程方式为iOS中的所有设备全屏设置UIView?

g:如何将模型实例传递到小部件并在模板中访问它

如何将Tkinter Scale小部件的状态设置为Disabled?

Flutter-如何将focusNode从Parent设置为Child小部件?

如何将GtkEntry小部件设置为仅使用C接受数字?

如何将Flutter Chip小部件的顶部和底部边距设置为零?

如何将 QStackedWidget 大小设置为子小部件的最小大小?

将Imageview设置为活动的全屏

如何通过单击小部件按钮将所有小部件值设置为默认值?

如何删除我的滑块中的空白(尝试全屏滑块)

使用 VideoFragment 在 Leanback 上播放视频时如何将缩放模式设置为拉伸至全屏