Sept. 11, 2019, 1:45 p.m.

Как в Qt воспроизвести видео?

Добрый день.
Как в Qt воспроизвести видео?
Это мой код, но никакое окно не появляется:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtMultimedia/QMediaPlayer>
#include <QtMultimedia/QMediaPlaylist>
#include <QtMultimediaWidgets/QVideoWidget>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QMediaPlayer *player = new QMediaPlayer;

    QMediaPlaylist *playlist = new QMediaPlaylist(player);
    playlist->addMedia(QUrl("C:/Users/New Owner/Downloads/example.mp4"));
    playlist->addMedia(QUrl("C:/Users/Public/Videos/Sample Videos/Живая природа.wmv"));

    QVideoWidget *videoWidget = new QVideoWidget(this);
    videoWidget->setSizeIncrement(600,600);
    player->setVideoOutput(videoWidget);

    videoWidget->show();
    playlist->setCurrentIndex(0);
    player->play();
}

MainWindow::~MainWindow()
{
    delete ui;
}


Так тоже не работает:

    QMediaPlayer* player = new QMediaPlayer(this);

    QGraphicsVideoItem *item = new QGraphicsVideoItem;
    player->setVideoOutput(item);
    QGraphicsView * graphicsView = new QGraphicsView(this);
    graphicsView->scene()->addItem(item);
    graphicsView->show();

    player->setMedia(QUrl("C:/Users/Public/Videos/Sample Videos/Живая природа.wmv"));
    player->play();
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
4

Так работает, но как переместить это решение в метод класса?

#include <QApplication>
#include <QMainWindow>
#include <QVideoWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>

int main(int argc, char * argv[])
{
    QApplication testApp(argc, argv);
    QMainWindow w;

    QVideoWidget videoWidget(&w);
    w.setCentralWidget(&videoWidget);

    QMediaPlayer *player = new QMediaPlayer(&w);

    player->setMedia( QUrl::fromLocalFile("E:\\big_buck_bunny.mp4") );
    player->setVideoOutput(&videoWidget);

    w.show();

    player->play();

    return testApp.exec();
}

Так работает, осталось понять как растянуть все видео на весь экран.

    QMediaPlayer *player = new QMediaPlayer(this);
    QVideoWidget *videoWidget = new QVideoWidget(this);
    videoWidget->setSizeIncrement(900,900);
    player->setVideoOutput(videoWidget);

    videoWidget->show();
    player->setMedia( QUrl::fromLocalFile("C:/Users/New Owner/Downloads/example.wmv") );
    player->play();

Нужно использовать Layout в окне. Например у меня получилось так сделать.

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class QVideoWidget;
class QMediaPlayer;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    void onPlayButtonCLicked();

    Ui::MainWindow *ui;
    QVideoWidget *m_videoWidget;
    QMediaPlayer *m_player;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QVideoWidget>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_videoWidget = new QVideoWidget(this);
    ui->gridLayout->addWidget(m_videoWidget);
    m_player = new QMediaPlayer(m_videoWidget);
    m_player->setVideoOutput(m_videoWidget);

    connect(ui->playButton, &QPushButton::clicked, this, &MainWindow::onPlayButtonCLicked);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onPlayButtonCLicked()
{
    m_player->setMedia(QUrl::fromLocalFile("/home/dekadent/anim_card_flip.mp4"));
    m_player->play();
}

Здесь полный код проекта Video.zip Video.zip

С таким подходом помогло создать виджет в редакторе, изменить его класс на QVideoWidget и уже его растянуть.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

LP
Nov. 12, 2019, 8:22 a.m.
Lev Parhimovich

C++ - Test 006. Enumerations

  • Result:50points,
  • Rating points-4
LP
Nov. 12, 2019, 7:35 a.m.
Lev Parhimovich

C++ - Test 005. Structures and Classes

  • Result:66points,
  • Rating points-1
LP
Nov. 12, 2019, 7:26 a.m.
Lev Parhimovich

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
Last comments
b
Nov. 9, 2019, 8:28 a.m.
bastonc

спасибо ещё раз. огромное, за уделённое время
b
Nov. 9, 2019, 8:24 a.m.
bastonc

Спасибо Вам большое. Буду изучать.
Nov. 9, 2019, 5:58 a.m.
Evgenij Legotskoj

Добрый день. По первым двум вопросам вы найдёте ответ в этой статье - PyQt5 - Урок 008. Работа с QTableWidget (Обновление урока 006) Что касается последнего вопроса, то я вам…
Nov. 9, 2019, 2:50 a.m.
Evgenij Legotskoj

Как и обещал, вы можете посмотреть новую статью QML - Урок 037. Кастомизация кнопок в QML (Обновление урока 002) . Там же найдёте ссылку на Git репозиторий. Не забудьте поставить звёз…
b
Nov. 8, 2019, 7:40 a.m.
bastonc

Приветствую. Подскажите пожалуйста пару моментов. 1. Как сделать столбец не редактируемый, а остальные ячейки остаются редактируемыми 2. Как оталвливать события двойного клика для реда…
Now discuss on the forum
KZ
Nov. 13, 2019, 10:07 a.m.
Konstantin Znamenskii

Добрый день. Я хочу узнать, как наиболее грамотно обновлять Maintenance Tool у пользователя. Я периодически выкладываю обновления пакетов самой программы, но мне также нужно вносить изменения в …
Nov. 13, 2019, 9:33 a.m.
Pavel.K

Приложение трэкинг задач. Есть вложения. Добавляем вложение и отправляем его на сервер. Для синхронного вызова методов в синхронизации, используем QEventLoop при отправке вложений. В момент син…
Nov. 13, 2019, 6:41 a.m.
Ruslan Polupan

Ну ка кбы уже лет 10 как работает :-) Просто нужна отдельная прога для добавления таких записей, отдать клиентам чтобы мозг не парили....
Nov. 13, 2019, 3:13 a.m.
Evgenij Legotskoj

Добрый день. Думаю, что да. Выбранный стиль можно подгружать при запуске программы. Во всяком случае, есть такой пример на C++ - Controls Gallery . И там есть такой код #incl…
Nov. 12, 2019, 9:35 a.m.
Evgenij Legotskoj

Добрый день. Для корректной вставки ссылок на youtube вставляйте их через пустую строку, таким образом Первая ссылка Вторая ссылкаТретья ссылка
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB