gpt4 book ai didi

c++ - 在 Qt 4.8 中集成 OGRE 1.7.3

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:06 27 4
gpt4 key购买 nike

我尝试将 ogre3d 小部件嵌入到 Ubuntu 上的 qt 小部件中,但我们看到黑屏。

当我们在没有父窗口部件(作为主窗口)的情况下使用 ogre::Root::RenderWindow 时,一切正常。但是当我们创建 ogre::Root::RenderWindow 作为其他主窗口的子窗口时,我们遇到 ogre 无法工作。

代码如下:

cpp: http://pastebin.com/Rbxa5btj

标题:http://pastebin.com/F4w5eQ7d

最佳答案

我遇到了这个问题,我需要调用 XSync 方法,如下所示。这是 OgreWidget::initialize 方法的一部分,其中 OgreWidgetQWidget 的子类。 initializem_OgreRoot 被分配并设置渲染系统之后,作为 OgreWidget 构造的一部分被调用。

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 修改的相同代码。 QX11Info 已从 Qt 5.0.x 中删除,然后添加到 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);

关于c++ - 在 Qt 4.8 中集成 OGRE 1.7.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com