Qt QQuickWidget与QGraphicsVideoItem冲突

时间:2020-03-02 16:21:34

标签: qt qml qquickwidget

我一直在使用QGraphicsScene和QGraphicsVideoItem作为画布。为了控制它们,我选择使用qml和QQuickWidget为其他模块轻松开发自定义对象。但是,我很快遇到了一个问题,即QGraphicsVideoItem不会在QGraphicsScene中呈现,而会在QQuickWidget内部(无论是空白还是附加了qml源)都呈现。而且似乎可以通过使用新项目来重现该问题,只需将一个空的QQuickWidget(通过qt设计器)放置在主ui的任何位置即可。

这是可复制的代码:

#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;

};

当我也从ui文件中删除小部件时,问题立即消失了。那我在这里想念什么吗?

1 个答案:

答案 0 :(得分:0)

调用ui.widget->setLayout(layout);时,将中断Qt Designer中设置的布局。

不是在您的* .cpp文件中以编程方式创建QGraphicsViewQVBoxLayout,而是将它们全部添加到Qt Designer中。

(如果问题仍然存在,请编辑您的原始帖子并添加您的* .ui文件)