OpenGL在Qt快速跨平台应用中的应用

OpenGL在Qt快速跨平台应用中的应用,opengl,qml,qt5,qtquick2,qtdeclarative,Opengl,Qml,Qt5,Qtquick2,Qtdeclarative,我正在尝试开发一个跨平台(或者至少是桌面+嵌入式硬件)的应用程序。我想使用Qt Quick创建一个触摸友好的GUI。我已经用QGLWidget实现了一个显示数据的经典应用程序。OpenGL中只有窗口的一部分是很重要的。因此,EGLFS和LinuxFB存在问题。只有X11(或者可能是Wayland)可以正确显示应用程序(其他人会生成一些关于缺少setParent函数的错误,整个屏幕是黑色的)。现在我正试图在QML中实现同样的目标。我想使用这个OpenGL渲染器作为我的QML应用程序的一部分,并围绕

我正在尝试开发一个跨平台(或者至少是桌面+嵌入式硬件)的应用程序。我想使用Qt Quick创建一个触摸友好的GUI。我已经用QGLWidget实现了一个显示数据的经典应用程序。OpenGL中只有窗口的一部分是很重要的。因此,EGLFS和LinuxFB存在问题。只有X11(或者可能是Wayland)可以正确显示应用程序(其他人会生成一些关于缺少setParent函数的错误,整个屏幕是黑色的)。现在我正试图在QML中实现同样的目标。我想使用这个OpenGL渲染器作为我的QML应用程序的一部分,并围绕它使用一些Qt Quick小部件。我发现有几个人在问同样的问题,答案总是将QDeclarativeItem子类化,并将其称为painter's beginativepainting()(其他人说通过QDeclarativeItem导出,但我不知道如何实现)。问题是,在桌面上,Qt5.11的本地画师不是OpenGL。在QT5中,没有办法强制OpenGL图形系统。因此,当我尝试获取OpenGL上下文(QGLContext::currentContext())时,我总是得到NULL。另一个问题:如果我用qmlRegisterType(“Test”,1,0,“Test”)导出我的小部件;它只有在我使用QDeclarativeView时才可见,但之后它看不到Qt Quick。如果我使用QQuickView,它会显示模块“测试”未安装。如何正确实现此功能?

QDeclarativeItem来自Qt Quick 1和Qt4。对于Qt5和QtQuick2,您应该使用QQuickItem。
qt文档中至少提供了一个示例,您可以在示例部分欢迎选项卡的qt Creator中找到。

谢谢,现在我使用QQuickPaintedItem,OpenGL上下文不为空。但我不能用QOpenGLShaderProgram编译着色器。编译顶点着色器时出错,日志为空甚至更糟,如果我注释掉所有内容并用黑色清除屏幕,则不会发生任何事情。小部件保持与背景相同的颜色。如果我在没有BeginativePainting()的情况下使用painter绘制矩形,那么就可以了。但不幸的是,我需要OpenGL。我能够根据examples/quick/scenegraph/openglunderqml下的示例绘制窗口。但是:每次当油漆被调用时,制服都会被破坏。我还需要多重采样来进行反序列化。使用window()->openglContext()->format()设置多采样。设置采样(4);根本不做任何事。。。