我在Ogre中的sdkTrays有一些严重的问题。
我有从BaseApplication继承的OgreKinectGame。 BaseApplication正在使用sdkTrayManager创建徽标等。我认为此mTrayMgr是继承的,也可以在我的应用程序中使用。
我正在尝试为HUD设置窗口小部件,但出现了未处理的异常错误。
我的setupWidgets()函数如下所示。
void OgreKinectGame::setupWidgets()
{
if(!mTrayMgr)
mTrayMgr = new SdkTrayManager("InterfaceName", mWindow, mMouse);
//mTrayMgr->destroyAllWidgets(); this caused exceptions as well
// create check boxes to toggle the visibility of our particle systems
const int WIDTH_UI = 160;
// main menu
mTrayMgr->createLabel(TL_CENTER, "mMainMenuLabel", "Main Menu", WIDTH_UI);
mTrayMgr->createButton(TL_CENTER, "mOptionButton", "Option");
mTrayMgr->createButton(TL_CENTER, "mCreditButton", "About");
mTrayMgr->createButton(TL_CENTER, "mQuitButton", "Quit");
mTrayMgr->showAll();
}
最佳答案
首先,您在哪里初始化setupWidgets()? ,在BaseApplication类上,它们具有setup(),您可以在主类中创建此setup()的虚拟对象,然后在其中初始化setupWiget(),例如,
bool OgreKinectGame::setup(void)
{
if (!BaseApplication::setup()) {
return false;
}
// Load fonts for tray captions
FontManager::getSingleton().getByName("SdkTrays/Caption")->load();
setupWidgets();//initialize here for your setupWidget()
}
其次,我认为您的setupWidget()应该像这样,
void OgreKinectGame::setupWidgets()
{
const int WIDTH_UI = 160;
// main menu
mTrayMgr->createLabel(TL_CENTER, "mMainMenuLabel", "Main Menu", WIDTH_UI);
mTrayMgr->createButton(TL_CENTER, "mOptionButton", "Option");
mTrayMgr->createButton(TL_CENTER, "mCreditButton", "About");
mTrayMgr->createButton(TL_CENTER, "mQuitButton", "Quit");
}
您是否可以尝试此解决方案,如果仍然崩溃,可以再次返回?
关于c++ - Ogre中带有sdkTrays的未处理异常小部件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44497774/