【问题标题】:Strategy for porting QDeclarative-based code to Qt 5.6.0将基于 QDeclarative 的代码移植到 Qt 5.6.0 的策略
【发布时间】:2016-05-19 21:18:50
【问题描述】:

我正在尝试将当前独立的 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) 似乎建议使用已弃用的声明性模块作为解决此问题的方法,但是 QDeclarative 的所有源代码已从 5.6.0 开始从 qtquick1 中删除,我无法将“主应用程序”切换回 Qt 的早期版本。

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

【问题讨论】:

    标签: qt qtquick2 qtdeclarative


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多