2013-10-16 32 views
0

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

+0

我可以根据examples/quick/scenegraph/openglunderqml下的例子绘制窗口。但是:每次调用paint时,制服都会被破坏。另外我需要多次采样来进行反锯齿。使用window()设置多重采样 - > openglContext() - > format()。setSamples(4);根本不会做任何... – xdever

回答

0

QDeclarativeItem来自Qt Quick 1和Qt4。使用Qt 5和Qt Quick 2,你应该使用QQuickItem。 至少有一个与qt docs一起提供的例子,你可以在Qt Creator中的Examples部分的Welcome标签中找到它。

+0

谢谢,现在我使用QQuickPaintedItem并且OpenGL上下文不为NULL。但我无法用QOpenGLShaderProgram编译着色器。编译顶点着色器时出现错误,并且日志为空 – xdever

+0

更糟糕的是,如果我评论所有内容并仅用黑色清除屏幕,则什么也不会发生。该小部件保持与背景相同的颜色。如果我在没有beginNativePainting()的情况下绘制一个带有画家的矩形,那么就没关系。但不幸的是我需要OpenGL。 – xdever