Как установить QVideoWidget в полноэкранный режим и иметь ползунок громкости в полноэкранном виджете? - PullRequest
0 голосов
/ 03 сентября 2018

Я работаю над простым приложением зацикливания видео и хотел бы узнать, есть ли способ добавить регулятор громкости в полноэкранный режим 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

the videowidget.cpp

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

Одним из решений, которое я мог бы придумать, является создание базового виджета для рисования другого видео-виджета и слайдера и загрузка его в событие двойного щелчка, но у меня возникают трудности с его реализацией. Я понятия не имею, как перенести текущие состояния воспроизведения медиаплеера в новый виджет видео.

1 Ответ

0 голосов
/ 03 сентября 2018
#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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...