Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt/QML:我该怎么做;切换到";或;开放式;是否在不重新启动我的应用程序的情况下创建另一个QML文件?_C++_Qt_Qml_Qqmlapplicationengine - Fatal编程技术网

C++ Qt/QML:我该怎么做;切换到";或;开放式;是否在不重新启动我的应用程序的情况下创建另一个QML文件?

C++ Qt/QML:我该怎么做;切换到";或;开放式;是否在不重新启动我的应用程序的情况下创建另一个QML文件?,c++,qt,qml,qqmlapplicationengine,C++,Qt,Qml,Qqmlapplicationengine,我有一个小应用程序,它从服务器加载一个QML文件,并向用户显示某种“书架” >用户可以选择显示的书籍中的一个,C++将在后台下载一个zip文件,解包。结果是文件系统中的每本书都有一个文件夹,其中包含一个“main.qml”文件,该文件基本上是该书的自包含版本,允许用户浏览/缩放等 我正在使用ApplicationWindow在其QML文件中显示书架,现在我想知道“切换”到书本并在ApplicationWindow中显示它的最佳方法是什么。我的意思是,如果书架基本上是从内存中“卸载”到书籍展示的可

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

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

我正在使用
ApplicationWindow
在其QML文件中显示书架,现在我想知道“切换”到书本并在ApplicationWindow中显示它的最佳方法是什么。我的意思是,如果书架基本上是从内存中“卸载”到书籍展示的可用资源,那就太好了

我该怎么做

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

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

任何建议都将不胜感激

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


但是,最好动态加载“屏幕”,然后在销毁前一个屏幕之前使用转换效果。

您可以从QML的Javascript上下文中手动创建/销毁QML组件: