Ich genieße Qt3D verwenden, aber alle die Beispiele, die ich für sie zu sehen sind voll Fensteranwendungen. Was ich aus den Beispielen nicht verstehen kann ist, wie man ein qt3d Renderfenster zu einer normalen qt gui Anwendung hinzufügt.Wie rende ich in Qt3D in einer Standard-GUI-Anwendung?
Im Grunde, was ich will, ist ein wenig Rendering-Widget für meine QT5 Gui-Anwendung.
Ich habe in Qtgl Widget sieht, aber ich mag wirklich die Szene Management-Fähigkeiten von Qt3D verwenden.
Wie kann ich machen als Sub-Fenster innerhalb eines qt Gui Fenster?
Ist das möglich?
aktualisieren
So habe ich das meinem mainwindow.cpp Es lose aus dieser http://blog.qt.digia.com/blog/2013/02/19/introducing-qwidgetcreatewindowcontainer/
basiertLoadModelView *view = new LoadModelView(); //Crashes on this. Will not compile with
// LoadModelView(this)
QWidget *container = QWidget::createWindowContainer(view);
container->setFocusPolicy(Qt::TabFocus);
ui->gridLayout->addWidget(container);
das Recht scheint.
meine load_model.cpp beginnt wie folgt aus:
#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 mit: Diese Anwendung die Laufzeit es auf eine ungewöhnliche Art und Weise zu beenden angefordert hat.
und in der Anwendungsausgabe qt: Ungültige Parameter C Laufzeit-Funktion übergeben.
EDIT Added der Rest der Klasse in Frage
merke ich, dass ich im Beispiel bin Anpassung http://doc.qt.digia.com/qt-quick3d-snapshot/qt3d-penguin-main-cpp.html das Fenster mit den Worten initialisiert wird:
LoadModelView view;
jedoch sagen
LoadModelView *view = new LoadModelView(this)
Abstürze
Ich * denke * das mache ich schon. http://pastebin.com/tRi9BVwn Was ich fragen ist, wie bekomme ich dies in einem bereits vorhandenen Fenster Pop-up. Können Sie zeigen, wie Sie dies von mainwindow.cpp aus aufrufen? Wenn ich versuche, w.show und dann view.show hinzuzufügen, stürzt alles ab. Ich möchte ein normales Fenster mit Knöpfen etc ... und ein 3D-Render eingebettet unter den Tasten. – baordog
https://qt-project.org/forums/viewthread/22465 Dieser Thread bekommt meine Frage. Antwortet auch nicht. – baordog
Sie können QWidget :: createWindowContainer in Qt 5.1 verwenden. Ich habe die Antwort aktualisiert. – Nejat