[Interest] [Qt3d] QSceneLoader in Thread

Saif Suleiman saifqaher94 at gmail.com
Wed Oct 10 14:00:43 CEST 2018


Currently I am trying to import a scene in my Qt3d application. The problem
is, when creating an instance from QSceneLoader and set the sources QUrl
then add it to an Entity, it freezes the application until it finishes the
importing. I tried to put it in thread like :

void start(){
    qDebug() << "Thread";

    QAspectEngine* pAs = new QAspectEngine();
    pAs->registerAspect(new QRenderAspect());

    QRenderSettings *renderSettings = new QRenderSettings();
    renderSettings->setActiveFrameGraph(new Qt3DExtras::QForwardRenderer());

   // Root entity
   Qt3DCore::QEntity *sceneRoot2 = new Qt3DCore::QEntity();
   sceneRoot2->addComponent(renderSettings);

   pAs->setRootEntity(QSharedPointer<QEntity>(sceneRoot2));

   Qt3DRender::QSceneLoader *sceneLoader = new Qt3DRender::QSceneLoader();
   SceneWalker sceneWalker(sceneLoader);
   QObject::connect(sceneLoader,
&Qt3DRender::QSceneLoader::statusChanged, &sceneWalker,
&SceneWalker::onStatusChanged);

   sceneLoader->setSource(QUrl::fromLocalFile("C:/Users/USER/Downloads/TreeTest.obj"));
   sceneRoot2->addComponent(sceneLoader);

}

This fuction will run when the Qthread emit the started signal, but then i
got this : QObject::setParent: Cannot set parent, new parent is in a
different thread.

So i do not know how to import a scene in qt3d without freezing the app,
can any one help please.
Thanks in advance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20181010/0d16d041/attachment.html>


More information about the Interest mailing list