Почему QSceneLoader останавливает сцену и как я могу запустить ее в потоке? - PullRequest
0 голосов
/ 10 октября 2018

В настоящее время я пытаюсь импортировать сцену в моем приложении Qt3D.Проблема заключается в том, что при создании экземпляра из QSceneLoader и установке исходного кода QUrl, а затем добавлении его в сущность приложение замораживает приложение до завершения импорта.

Я пытался поместить его в поток, например:

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);
}

Эта функция будет запускаться, когда QThread издает сигнал запуска, но потом я получил это: QObject::setParent: Cannot set parent, new parent is in a different thread.

Так что я не знаю, как импортировать сцену в Qt3D без зависания приложения,может ли кто-нибудь помочь?

...