Я использовал QGraphicsScene и QGraphicsVideoItem в качестве холста. И чтобы управлять ими, я решил использовать qml и QQuickWidget для простой разработки пользовательских объектов для другого модуля. Однако я быстро столкнулся с проблемой, когда QGraphicsVideoItem будет отображаться не в QGraphicsScene, а скорее внутри QQuickWidget (как при пустом виджете, так и при подключенном источнике qml). И проблема, кажется, воспроизводима также с помощью проекта fre sh, просто поместив пустой QQuickWidget (через qt designer) где-нибудь внутри основного интерфейса.
Вот воспроизводимый код:
#include "QtGuiApplication1.h"
QtGuiApplication1::QtGuiApplication1(QWidget *parent): QMainWindow(parent)
{
ui.setupUi(this);
QGraphicsView* view = new QGraphicsView(ui.widget);
QGraphicsScene* scene = new QGraphicsScene();
QGraphicsVideoItem* video = new QGraphicsVideoItem();
QMediaPlayer* player = new QMediaPlayer();
QUrl path = QUrl::fromLocalFile("D:/My Documents/Videos/XIII.mp4");
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(view);
ui.widget->setLayout(layout);
video->setFlags(QGraphicsVideoItem::ItemIsMovable | QGraphicsVideoItem::ItemIsFocusable | QGraphicsVideoItem::ItemIsSelectable);
video->setPos(100, 100);
//view->setSceneRect(QRectF(QPointF(100, 100), QPointF(800, 600)));
view->setScene(scene);
player->setMedia(path);
player->setVideoOutput(video);
scene->addItem(video);
player->play();
view->show();
}
#pragma once
#include "ui_QtGuiApplication1.h"
#include <QtCore>
#include <QDebug>
#include <QGraphicsVideoItem>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QMediaPlayer>
#include <QUrl>
#include <QString>
class QtGuiApplication1 : public QMainWindow
{
Q_OBJECT
public:
QtGuiApplication1(QWidget *parent = Q_NULLPTR);
private:
Ui::QtGuiApplication1Class ui;
};
Проблема немедленно исчезла, когда я также удалил виджет из файла пользовательского интерфейса. Так я что-то здесь упускаю?