Qt/QML:如何在不重新启动应用程序的情况下"switch to"或"open"另一个 QML 文件?

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

本文关键字:QML to switch 另一个 文件 情况下 open 应用程序 Qt 重新启动      更新时间:2023-10-16

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

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

我正在使用ApplicationWindow在其QML文件中显示书架,现在我想知道"切换"到书并在ApplicationWindow中显示它的最佳方法是什么。我的意思是,如果书架能从内存中"卸载"出来,为图书展示腾出资源,那就太好了。

我该怎么做?

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

  • 是否使用QQmlApplicationEngine::load()加载另一个URL
  • 将书籍的QML组件作为最上面的子对象添加到书架;但这会导致大量的资源浪费

欢迎提出任何建议!

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

然而,最好动态加载"屏幕",然后可以在销毁前一个屏幕之前使用过渡效果。