Wie in Qt3D in Standard-GUI-Anwendung zu rendern?

Ich benutze Qt3D gerne, aber alle Beispiele, die ich dafür sehe, sind vollständige Fensteranwendungen. Was ich aus den Beispielen nicht verstehen kann, ist, wie man ein qt3d-Rendering-Fenster zu einer normalen qt-GUI-Anwendung hinzufügt.

Grundsätzlich möchte ich ein kleines Rendering-Widget für meine Qt5 Gui-Anwendung.

Ich habe mir das Qtgl-Widget angesehen, möchte aber unbedingt die Funktionen zur Szenenverwaltung von Qt3D nutzen.

Wie kann ich als Unterfenster in einem QT-GUI-Fenster rendern?

Ist das möglich?

Aktualisieren

Also habe ich dies zu meinem MainWindow.cpp hinzugefügt. Es basiert lose daraufhttp://blog.qt.digia.com/blog/2013/02/19/introducing-qwidgetcreatewindowcontainer/

LoadModelView *view = new LoadModelVie,w(); //Crashes on this. Will not compile with
                                           // LoadModelView(this) 

    QWidget *container = QWidget::createWindowContainer(view);
    container->setFocusPolicy(Qt::TabFocus);

    ui->gridLayout->addWidget(container);

was richtig scheint.

Meine load_model.cpp beginnt so:

#include "qglmaterialcollection.h"
#include "qglmaterial.h"
#include "qglscenenode.h"
#include "qgllightmodel.h"
#include "qglabstractscene.h"
#include <QtGui/qmatrix4x4.h>

#include <QPropertyAnimation>
#include <QtCore/qmath.h>

#define DEGREE_TO_RAD (3.1415926/180.0)

LoadModelView::LoadModelView(QWindow *parent)
    : QGLView(parent)
    , m_pSTLScene(0)

{
    loadModels();

    camera()->setCenter(QVector3D(0, 0, 0));
    camera()->setEye(QVector3D(0, 4, 10));
}
LoadModelView::~LoadModelView()
{

    delete m_pSTLScene;
}

void LoadModelView::paintGL(QGLPainter *painter)
{
    QMatrix4x4 stlWorld;
    stlWorld.setToIdentity();
    stlWorld.scale(0.1);
    stlWorld.translate(QVector3D(2.0,0.0,0.0));

    painter->setStandardEffect(QGL::LitMaterial);
    painter->setFaceColor(QGL::AllFaces,QColor(170,202,0));

    painter->modelViewMatrix() = camera()->modelViewMatrix() * stlWorld;

    m_pSTLScene->mainNode()->draw(painter);
}

void FixNodesRecursive(int matIndex, QGLSceneNode* pNode)
{
    if (pNode) {
        pNode->setMaterialIndex(matIndex);
       // pNode->setEffect(QGL::FlatReplaceTexture2D);
        foreach (QGLSceneNode* pCh, pNode->children()) {
            FixNodesRecursive(matIndex, pCh);
        }
    }
}

void LoadModelView::loadModels()
{
    {
        m_pSTLScene = QGLAbstractScene::loadScene(QLatin1String(":/models/Sheep.stl"), QString(),"CorrectNormals CorrectAcute");
        Q_ASSERT(m_pSTLScene!=0);
        QGLMaterial *mat = new QGLMaterial;
        mat->setAmbientColor(QColor(170,202,0));
        mat->setDiffuseColor(QColor(170,202,0));
        mat->setShininess(128);

        QGLSceneNode* pSTLSceneRoot = m_pSTLScene->mainNode();
        int matIndex = pSTLSceneRoot->palette()->addMaterial(mat);
        pSTLSceneRoot->setMaterialIndex(matIndex);
        pSTLSceneRoot->setEffect(QGL::FlatReplaceTexture2D);
        FixNodesRecursive(matIndex,pSTLSceneRoot);

    }

}

Es stürzt ab mit: Diese Anwendung hat die Laufzeitumgebung aufgefordert, es auf ungewöhnliche Weise zu beenden.

und in der qt-Anwendungsausgabe: Ungültiger Parameter an C-Laufzeitfunktion übergeben.

EDIT Fügte den Rest der fraglichen Klasse hinzu

Ich bemerke, dass ich mich im Beispiel anpassehttp://doc.qt.digia.com/qt-quick3d-snapshot/qt3d-penguin-main-cpp.html Das Fenster wird mit folgenden Worten initialisiert:

LoadModelView view;

Allerdings sagen

LoadModelView *view = new LoadModelView(this)

stürzt ab

Antworten auf die Frage(2)

Ihre Antwort auf die Frage