0

我正在尝试将当前独立的 Qt QML 应用程序(“新应用程序”)添加为大型非 QML Qt 应用程序(“主应用程序”)中 QMdiArea 中的显示小部件。我尝试将其添加到的主应用程序使用 Qt 5.6.0,而新应用程序使用 Qt 4.8。

我的第一步是在 Qt 5.6 下编译“新应用程序”,但 Qt QML 应用程序在 Qt 4 和 Qt 5 之间的主要架构变化让我很难过。“新应用程序”的主视图直接继承自 QDeclarativeView,并大量使用 QWidget 和 QGraphicsView 功能。

Qt 将 QML 应用程序从 Qt4 迁移到 Qt5 的指南(http://doc.qt.io/qt-5/qtquick-porting-qt5.html)似乎建议使用已弃用的声明性模块作为解决此问题的方法,所有自 5.6.0 起,QDeclarative 的源代码已从 qtquick1 中删除,我无法将“主应用程序”切换回 Qt 的早期版本。

我对 Qt 和“新应用程序”都很陌生。有没有比完全理解当前设计的“新应用程序”然后阅读旧的声明性框架和新的 qtquick 框架并重组/重写所有内容以使用新的 qtquick 框架更简单的方法?

4

1 回答 1

1

移植到 QML2 的工作有很大的不同,这取决于您拥有多少自定义项以及您如何与主应用程序中的声明性视图进行交互。无论哪种方式,我强烈建议在尝试移植之前花时间真正理解现有的 QML 代码。大部分移植代码通常只包含用 QQuick* 替换 QDeclarative*,但您最终不得不面对移植的 QGraphicsView -> OpenGL 部分。

要在 QWidget 应用程序中嵌入 QML2 场景,您需要 QQuickWidget。

我有点惊讶自己 QtQuick1 被完全删除,而不仅仅是在 qt 5.6 中被弃用。如果您编译并发布自己的工具链,那么重新引入 qtquick1 子模块应该不会太费力,因为 qt5.6 中没有重大的架构更改使其无法正常工作。

于 2016-05-20T07:33:15.130 回答