2016-07-04 5 views
0

Meine App ist in zwei Module unterteilt, eines ist Spielwelt von Ogre angetrieben, während ein anderes GUI-Modul mit QT implementiert ist.CreateRenderWindow() abgestürzt, wenn ein Qt-Fenster in Ogre

Beim App-Start erstelle ich einfach eine QApplication-Instanz und ein leeres QWindow, dann lege ich QWindow in ein Widget. Der Code sieht wie folgt aus:

`` `

QApplication qapp(argc, argv); 
// The class gameworld_widget is just a subclass of QWindow with no other content 
ui::gameworld_widget *mainWnd = new ui::gameworld_widget; 
QWidget mainWndContainer; 
mainWndContainer.setObjectName("OGRE222"); 
mainWndContainer.resize(800, 600); 
mainWndContainer.createWindowContainer(mainWnd); 
mainWndContainer.show(); 

` ``

Dann erstelle ich einen weiteren Thread Ogre Modul an anderer Stelle zu schaffen und initilize und schließlich gebe ich die Kontrolle 'Mainthread' zu Qt .

`` `

// Get HWND of gameworld_widget in 'main thread' 
auto hMainWnd = reinterpret_cast<HWND>(mainWnd->winId()); 
std::thread gameWorldThread([hMainWnd]() { 
try { 
game_world gameWorld(hMainWnd); // see below 
} 
catch (game_world_exception &ex) { 
std::cout << "GameWorldException occurs\n"; 
return; 
} 
}); 
gameWorldThread.detach(); // detach Ogre thread 
return qapp.exec(); // pass control to Qt 

` ``

In Ogre Modul, Mein Code sieht wie folgt aus:

`` `

Ogre::NameValuePairList params; 
params["externalWindowHandle"] = Ogre::StringConverter::toString(reinterpret_cast<size_t>(hwnd)); 
Ogre::RenderWindow *mWindow; 
try 
{ 
mWindow = root.createRenderWindow("SampleBrowser", 800, 600, false, &params); 
} 
catch (Ogre::Exception ex) 
{ 
std::cout << "Ogre exception occur:" << typeid(ex).name() << ex.what() << "\n"; 
throw game_world_exception(); 
} 
catch (...) 
{ 
throw game_world_exception(); // comment goes here 
} 

` ``

Hier kommt die Frage s. Beim Laufen

`` `

/* comment goes here */ 
mWindow = root.createRenderWindow("SampleBrowser", 800, 600, false, &params); 

` ``

My App abgestürzt ist, Ich kann auch nicht die Ausnahme fangen. enter image description here (Ich bin ein Chinese so die Sprache ist chinesisch ...) Der Inhalt der Fortschrittsbalken ist 'Ogre2.exe funktioniert nicht mehr ... Windows findet das Problem' Mein System ist Windows 10, IDE ist Visual Studio 2015. Und Ogre ist Version 1.8, Qt ist 5.7.0. Das gewählte Ogre Render-System ist OpenGL

Antwort

Verwandte Themen