我试图在一个大型非QML Qt应用程序的QMdiArea中添加一个当前独立的Qt QML应用程序("新应用程序")作为显示小部件("主要应用程序& #34)。我试图添加它的主要应用程序使用Qt 5.6.0,新应用程序使用Qt 4.8。
我的第一步是获得新应用程序"根据Qt 5.6进行编译,但Qt 4和Qt 5之间的Qt QML应用程序的主要体系结构变化令我感到难过。 "新应用程序的主要视图"直接从QDeclarativeView继承并使重使用QWidget和QGraphicsView功能。
用于将QML应用程序从Qt4迁移到Qt5(http://doc.qt.io/qt-5/qtquick-porting-qt5.html)的Qt指南似乎建议使用已弃用的声明性模块作为此问题的解决方案,但所有从5.6.0开始,QDeclarative的源代码已从qtquick1中删除,我无法切换"主应用程序"回到Qt的早期版本。我对Qt和"新应用程序都很陌生。"是否有一种更简单的方法来解决这个问题,而不是完全理解"新应用程序"按照目前的设计,然后阅读旧的声明框架和新的qtquick框架,并重新构建/重写所有内容以使用新的qtquick框架?
答案 0 :(得分:1)
QML2的移植工作量差别很大,具体取决于您拥有的自定义项目数以及如何与主应用程序中的声明性视图进行交互。无论哪种方式,我强烈建议在尝试移植之前花时间真正理解现有的QML代码。大多数移植代码通常只包含用QQuick *替换QDeclarative *,但你 最终必须面对QGraphicsView - > OpenGL部分移植。
为了在QWidget应用程序中嵌入QML2场景,QQuickWidget就是您所需要的。
我有点惊讶自己QtQuick1被完全删除而不仅仅是在qt 5.6中弃用。如果您编译并发布自己的工具链,那么重新引入qtquick1子模块不应该太费力,因为qt5.6中没有重大的架构变化使其无法工作。