Добавить кнопку в QVideoWidget

пример изображения

каждый! Я пытаюсь установить свойство 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

Решение

Одним из возможных решений является создание виджета, где 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();
}

введите описание изображения здесь

Полный пример можно найти в следующем ссылка на сайт.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]