Какие контейнеры Qt GUI использовать? Также связана проблема отображения видео — Windows 7

Я пытаюсь разработать приложение для воспроизведения нескольких видео (мультимедийных) файлов и предоставления возможности модификации пользователем каждого из них (например, масштабирование, вращение, инвертирование и т. Д. Видео). Я начал с изучения Phonon, но после того, как углубился в это, прочитал, что он больше не поддерживается (или его поддержка сомнительна) в> = Qt5, Итак, я вернулся и теперь я смотрю на qtmultimedia — QMediaPlayer, Несмотря на то, что я пришел из c # -WPF, я уже работал над Qt-C ++. Но на этот раз я застрял и запутался в том, какие виджеты я должен использовать. QMediaPlayer может показать свой вывод (видео) на QVideoWidget, QGraphicsVideoItem а также QAbstractVideoSurface, Так как мне нужны возможности вращения и т. Д., Я считаю, что я должен включить QGraphicsScene / View.

<1> Так каким должен быть подход? Я сделал это: использовал QVideoWidget -> добавил это к QGraphicsProxyWidget через его setWidget() (хоть setWidget() принимает QWidget* а также QVideoWidget не является производным от QWidget как я вижу в Qt Assistant — почему это разрешено, кстати?) -> добавил это QGraphicProxyWidget в QGraphicsScene с помощью addItem() -> добавил это QGraphicsScene в QGraphicsView при его строительстве -> добавлено QGraphicsView в QMainWindow с помощью setCentralWidget(). Это нормально? Когда использовать QGraphicsVideoItem а также QAbstractVideoSurface?

<2> При добавлении нескольких QVideoWidget следующим образом я не вижу ни видео, ни QVideoWidget сам (я нарисовал, чтобы отличить его). Что я делаю неправильно? (хотя есть аудио выход):

    QVideoWidget *pVideoWidget1 = new QVideoWidget(0);
pVideoWidget1->setPalette(QPalette(QColor(255,0,0),QColor(0,255,0)));
QVideoWidget *pVideoWidget2 = new QVideoWidget(0);
pVideoWidget2->setPalette(QPalette(QColor(255,0,0),QColor(0,0,255)));

m_pMediaPlayer1 = new QMediaPlayer(this);
m_pMediaPlayer2 = new QMediaPlayer(this);
m_pMediaPlayer1->setVideoOutput(pVideoWidget1);
m_pMediaPlayer2->setVideoOutput(pVideoWidget2);

m_pCustomGraphicsProxy1 = new CustomGraphicsProxy(0); //this is just a class derived from QGraphicsProxyWidget to implement drag and drop of videos
m_pCustomGraphicsProxy2 = new CustomGraphicsProxy(0);
m_pCustomGraphicsProxy1->setWidget(pVideoWidget1);
m_pCustomGraphicsProxy2->setWidget(pVideoWidget2);

QGraphicsScene *pGraphicsScene = new QGraphicsScene(this);
QGraphicsLinearLayout *pGraphicsLinearLayout = new QGraphicsLinearLayout;

CustomGraphicsProxy* button = new CustomGraphicsProxy(0);
button->setWidget(new QPushButton); //this i can see
CustomGraphicsProxy* button1 = new CustomGraphicsProxy(0);
button1->setWidget(new QPushButton); //this i can see too

pGraphicsLinearLayout->addItem(button);
pGraphicsLinearLayout->addItem(m_pCustomGraphicsProxy1); //can't see
pGraphicsLinearLayout->addItem(m_pCustomGraphicsProxy2); //can't see
pGraphicsLinearLayout->addItem(button1);CustomGraphicsProxy *temp = new CustomGraphicsProxy(0);
temp->setLayout(pGraphicsLinearLayout);
pGraphicsScene->addItem(temp);
temp->show();

m_pGraphicsView = new QGraphicsView(pGraphicsScene, this);

setCentralWidget(m_pGraphicsView);

QObject::connect(m_pCustomGraphicsProxy1, SIGNAL(sigNewFileDragDropped()), this, SLOT(sloPlayOnWindow1()));
QObject::connect(m_pCustomGraphicsProxy2, SIGNAL(sigNewFileDragDropped()), this, SLOT(sloPlayOnWindow2()));

//just for testing - this gives only audio no video can be seen
m_pMediaPlayer1->setMedia(QUrl::fromLocalFile("d:/z.avi"));
m_pMediaPlayer1->play();

<3> Прежде чем я продолжу изучать это, выбираю ли я правильные инструменты в Qt для манипулирования видео, как я упоминал ранее, или что-то еще нужно сделать?

0

Решение

Я предполагаю, что вы создаете свой собственный виджет для игрока. В этом случае используйте QWidget в конструкторе и продвигайте его. Это будет работать. Вот ссылка на Как?

0

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

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

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