我正在尝试开发一个跨平台(或至少是桌面+嵌入式硬件)应用程序。我想使用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,它说模块"测试"未安装。如何正确实现这一点?
QDeclarativeItem 来自 Qt Quick 1 和 Qt4。对于Qt 5和Qt Quick 2,您应该使用QQuickItem。qt文档至少提供了1个示例,您可以在Qt Creator的"示例"部分的"欢迎"选项卡中找到这些示例。