Добавление метки к видео

Я должен написать простой видеоплеер, который может отображать некоторые субтитры, ссылку или изображение (как на YouTube) в определенное время. Я понятия не имею, как отображать что-либо с помощью QVideoWidget. Я не мог найти какой-либо полезный класс для этого. Не могли бы вы дать мне несколько советов?

Я сделал это по-своему, но после загрузки любого видео QLabel исчезает...

player->setVideoOutput(vw);
playlistView->setMaximumWidth(200);
playlistView->setMinimumWidth(300);

window = new QWidget;

Playerlayout = new QGridLayout;

subtitleWidget = new QLabel;

subtitleWidget->setMaximumWidth(1000);
subtitleWidget->setMaximumHeight(100);
subtitleWidget->setStyleSheet("QLabel {background-color : red; color 
blue;}");

subtitleWidget->setAlignment(Qt::AlignCenter | Qt::AlignBottom);
subtitleWidget->setWordWrap(true);
subtitleWidget->setText("example subtitle");



Playerlayout->addWidget(vw,0,0);

Playerlayout->addWidget(subtitleWidget,0,0);

Playerlayout->addWidget(playlistView,0,1,1,2);

1 ответ

Решение

Если QVideoWidget не предоставляет то, что вам нужно, тогда вы всегда можете установить оверлей.

Основная иерархия элементов макета будет выглядеть примерно так...

QWidget
  layout
    QVideoWidget
    subtitle_widget

В этом случае макет может быть QStackedLayout используя режим укладки QStackedLayout::StackAll или QGridLayout с обоими QVideoWidget и subtitle_widget занимая те же ячейки, но с правильным z-порядком.

Идти с QGridLayout...

auto *w = new QWidget;
auto *l = new QGridLayout(w);
auto *video_widget = new QVideoWidget;
auto *subtitle_widget = new QLabel;

/*
 * Subtitles will be shown at the bottom of the 'screen'
 * and centred horizontally.
 */
subtitle_widget->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
subtitle_widget->setWordWrap(true);

/*
 * Place both the video and subtitle widgets in cell (0, 0).
 */
l->addWidget(video_widget, 0, 0);
l->addWidget(subtitle_widget, 0, 0);

Субтитры и т. Д. Теперь могут отображаться просто путем вызова subtitle_widget->setText(...) в соответствующее время.

Тот же метод может быть легко расширен для наложения других типов информации.

Другие вопросы по тегам