2012-05-10 14 views
4

私はogre3dウィジェットをUbuntuのqtウィジェットに埋め込もうとしていますが、黒い画面が表示されます。Qt 4.8でOGRE 1.7.3を統合

私たちがogre :: Root :: RenderWindowを親ウィジェットなしで(メインウィンドウとして)使用すると、すべてが機能します。しかし、ogre :: Root :: RenderWindowを他のメインウィンドウの子ウィンドウとして作成すると、鬼がうまく動作しません。

CPP:http://pastebin.com/Rbxa5btj

ヘッダ:ここ

コードであるhttp://pastebin.com/F4w5eQ7d

答えて

0

私はこの問題を抱えていた、私は以下に示すようにXSyncメソッドを呼び出す必要がありました。これはOgreWidget::initializeメソッドの一部です。OgreWidgetサブクラスQWidgetです。 initializeOgreWidgetの構成の一部として呼び出された後、m_OgreRootが割り当てられ、レンダリングシステムが設定された後。

setAttribute(Qt::WA_PaintOnScreen, true); 
setAttribute(Qt::WA_NoSystemBackground, true); 

setFocusPolicy(Qt::StrongFocus); 

Ogre::String winHandle; 
QX11Info info = x11Info(); 
winHandle = Ogre::StringConverter::toString((unsigned long)(info.display())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned int)(info.screen())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned long)(winId())); 

Ogre::NameValuePairList params; 
params["parentWindowHandle"] = winHandle; 
params["FSAA"] = Ogre::String("8"); 

int w = width(); 
int h = height(); 
// Need to call XSync or the window handles will be invalid. 
XSync(info.display(), False); 
m_OgreWindow = 
     m_OgreRoot->createRenderWindow("OgreWidget_RenderWindow", 
            qMax(w, 640), qMax(h, 480), false, &params); 

Qt 5.1.0と同じコードが変更されています。 Qt 5.0.xではQX11Infoが削除され、Qt 5.1.0の "extras"コンポーネントに追加されました。新しいQX11Infoクラスには静的メソッドしかありません。

#include <QtX11Extras/QX11Info> 
... 
setAttribute(Qt::WA_PaintOnScreen, true); 
setAttribute(Qt::WA_NoSystemBackground, true); 

setFocusPolicy(Qt::StrongFocus); 

Ogre::String winHandle; 
winHandle = Ogre::StringConverter::toString((unsigned long)(QX11Info::display())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned int)(QX11Info::appScreen())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned long)(winId())); 

Ogre::NameValuePairList params; 
params["parentWindowHandle"] = winHandle; 
params["FSAA"] = Ogre::String("8"); 

int w = width(); 
int h = height(); 
// Need to call XSync or the window handles will be invalid. 
XSync(QX11Info::display(), False); 
m_OgreWindow = 
     m_OgreRoot->createRenderWindow("OgreWidget_RenderWindow", 
            qMax(w, 640), qMax(h, 480), false, &params); 
関連する問題