添加按钮到QVideoWidget

时间:2018-01-03 16:34:41

标签: c++ linux qt qvideowidget

example image

大家好!我尝试将一个click属性设置为QMediaPlayer元素,但是我找不到模式来制作它,如果我尝试将一个按钮放在视频前面,那么按钮就会隐藏在视频中,即使是

button->raise();
videoWidget->lower();

如果我将按钮设置为全屏,则屏幕变为黑色并且不显示视频

此ID是视频播放器的代码

QMediaPlayer *player = new QMediaPlayer(this);
QVideoWidget *vw = new QVideoWidget(this);

QMediaPlaylist *PlayList = new QMediaPlaylist(this);
PlayList->addMedia(QUrl::fromLocalFile("/home/user/Videos/video.mp4"));
PlayList->setPlaybackMode(QMediaPlaylist::Loop);

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(vw);

player->setVideoOutput(vw);
player->setPlaylist(PlayList);

vw->setGeometry(0,0,800,480);
vw->show();
player->play();

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是创建一个小部件,其中QVideoWidget通过布局放置,按钮也被添加,我们通过resizeEvent()事件更改位置。

#include <QApplication>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPushButton>
#include <QUrl>
#include <QVBoxLayout>
#include <QVideoWidget>

#include <QDebug>

class VideoWidgetButton: public QWidget{
    QPushButton *btn;
    QVideoWidget *vw;
    QMediaPlayer *player;
public:
    VideoWidgetButton(QWidget *parent=Q_NULLPTR):QWidget(parent){
        setLayout(new QVBoxLayout);
        layout()->setContentsMargins(0, 0, 0, 0);

        vw = new QVideoWidget(this);
        btn = new QPushButton(this);
        btn->setIcon(QIcon(":/icons/tux.jpeg"));
        btn->resize(QSize(128, 128));
        btn->setIconSize(QSize(128, 128));

        connect(btn, &QPushButton::clicked, [](){
            qDebug()<<"clicked";
        });

        layout()->addWidget(vw);

        player = new QMediaPlayer(this);
        player->setVideoOutput(vw);

        QMediaPlaylist *playList = new QMediaPlaylist(this);
        playList->addMedia(QUrl("qrc:/video/SampleVideo_1280x720_1mb.mp4"));
        playList->setPlaybackMode(QMediaPlaylist::Loop);
        player->setPlaylist(playList);
        player->play();

    }
protected:
    void resizeEvent(QResizeEvent *ev){
        btn->move(rect().bottomRight()-btn->rect().bottomRight());
        return QWidget::resizeEvent(ev);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    VideoWidgetButton w;
    w.resize(640, 480);
    w.show();
    return a.exec();
}

enter image description here

完整示例可在以下link中找到。