c++ - Qt/QML : How do I "switch to" or "open" another QML file without restarting my app?

标签 c++ qt qml qqmlapplicationengine

我有一个从服务器加载 QML 文件并向用户显示某种“书架”的小应用程序。

用户可以选择其中一本显示的书籍,C++ 将在后台下载一个 ZIP 文件,并将其解压缩。结果是文件系统上每本书的文件夹都有一个“main.qml”文件,该文件基本上是该书的独立版本,允许用户浏览/缩放/等。

我正在使用 ApplicationWindow 在其 QML 文件中显示书架,现在我想知道“切换”到book 并将其显示在 ApplicationWindow 中。 最好 我的意思是,如果书架几乎从内存中“卸载”以释放资源用于书籍展示,那就太好了。

我该怎么做?

我的粗略想法,感觉不太“正确”是:

  • 使用 QQmlApplicationEngine::load() 加载另一个 URL?
  • 将图书的 QML 组件作为最顶层的子对象添加到书架;但这会导致大量资源浪费。
  • ...?

如有任何建议,我们将不胜感激!

最佳答案

最基本的解决方案是在您的应用程序窗口中使用 Loader。在实例化时使用您的 main.qml 设置它,然后当用户选择一本书时,将 Loader 的源设置为该书的 QML 文件。

然而,动态加载“屏幕”会更好,这样您就可以在销毁前一个屏幕之前使用过渡效果。

关于c++ - Qt/QML : How do I "switch to" or "open" another QML file without restarting my app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327168/

相关文章:

c++ - 有什么方法可以在运行时不间断地动态更新二进制文件(可执行文件)?

c++ - 使用 VS2010 Pro 在 Windows 8 上构建 Qt 4.8

c++ - 将 Signal QML 连接到 C++ (Qt5)

c++ - 使用 QAbstractItemModel 将 2D C++ 游戏板暴露给 QML

c# - 通过 COM 从 C++ 解决方案调试 C# dll

c++ - 车牌自动识别

c++ - 如何使用 find_package 通过 CMake 静态链接到许可的 Qt 库?

android - 如何使用 QT 5.2 在 Android 上的发布输出中删除 Debug模式

c++ - QT Text.WordWrap 在 ColumnLayout 中不起作用

c++ - 如何使用 Triclops 和 FlyCapture SDK 从 PointGrey BumbleBee2 立体相机创建深度图?