在Ogre中使用sdkTrays的未处理异常小部件

时间:2017-06-12 11:00:21

标签: c++ ogre3d

我在Ogre的sdkTrays中遇到了一些严重的问题。

我的OgreKinectGame继承自BaseApplication。 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();

} Unhandled exception

1 个答案:

答案 0 :(得分:1)

首先,您在哪里初始化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");
}

你能尝试这个解决方案吗?如果仍然崩溃,你可以再次回来吗?