Qt 在SDL上呈现快速GUI

Qt 在SDL上呈现快速GUI,qt,sdl,qt-quick,Qt,Sdl,Qt Quick,正在尝试将QML用户界面呈现到SDL窗口中 有一个SDL1.2游戏,它通过带有SDL\u OPENGLBLIT标志的SDL\u SetVideoMode创建OpenGL上下文 其思想是获取OpenGL上下文句柄并将其传递给QQuickRenderControl,该控件将在场景上绘制GUI 获取本机上下文(例如X11): 在Qt中采用它: QOpenGLContext *ctx = new QOpenGLContext; ctx->setNativeHandle(QVariant::from

正在尝试将QML用户界面呈现到SDL窗口中

有一个SDL1.2游戏,它通过带有
SDL\u OPENGLBLIT
标志的
SDL\u SetVideoMode
创建OpenGL上下文

其思想是获取OpenGL上下文句柄并将其传递给QQuickRenderControl,该控件将在场景上绘制GUI

获取本机上下文(例如X11):

在Qt中采用它:

QOpenGLContext *ctx = new QOpenGLContext;
ctx->setNativeHandle(QVariant::fromValue<QGLXNativeContext>(
    QGLXNativeContext(currentContext, wmInfo.info.x11.display, wmInfo.info.x11.window)
));
但是没有QWindow,QQuickRenderControl无法启动:

QQuickRenderControl::initialize called with no associated window
另外
ctx->isValid()
ctx->makeCurrent()
返回false


如何使其工作?

至少使用SDL2是可能的


Qt应用程序singleton必须正在运行,窗口必须从本机句柄中提取并传递给RenderControl。

能否提供更多信息?我得到ctx->isValid()返回false,即使SDL2@MiguelElMerendero,一个使用它的项目:您可以将
libopenage/gui/guisys
目录复制粘贴到您的项目中,并查看如何在
libopenage/gui_basic.h
libopenage/gui_basic.cpp
中进行集成。它在Linux上工作,Mac部分需要Mac开发人员来修复,如果你真的想要Windows,我可以发布一个小补丁,让它在Windows上运行。顺便说一句,它的最低版本(无错误检查,大量内存泄漏和硬代码,仅限Linux):谢谢,您的示例非常有用!不幸的是,它不适合我,我在windows上修改了一些代码,但我仍然无法获得有效的上下文。我不明白为什么,我在这里打开了这个问题:@MiguelElMerendero,中也有一个例子(见附件中的zip文件)。太棒了,谢谢。我将cmake项目移植到QtCreator的独立项目中,并将其附加到您的bugreport中。至少你的例子告诉我这个系统是有效的。无论如何,我仍然无法在我的项目中获得有效的上下文,我怀疑问题出在SDL方面,但我必须继续尝试。
QQuickRenderControl *renderControl = new QQuickRenderControl;
renderControl->initialize(ctx);
QQuickRenderControl::initialize called with no associated window