自制Qt Quick场景切换管理类
Qt Quick中有很多方法进行场景的切换,比如说使用Loader切换source的办法,还有StackView中对界面item进行push和pop进行操作。甚至自己也可以写方法,对item的显隐进行操作。当然上述方法或多或少我都尝试过,但这些我都感到不太满意,我于是想自己写一个场景的管理类,来解决这个问题。
蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/48139563。欢迎同行前来探讨。
在制作这个管理类之前,我提出了这些需求:
1、 必须做到懒加载。在之前的解决方案中,Loader和StackView只在通过设置容器的内容同时对内容进行一次实例化,这样符合懒加载的策略。而自己以前的界面切换方法(详细代码参见我以前的博客)将界面的初始化方法放在了程序初始化的时候,没有做到需要才加载,所以以前的方案不符合。
2、 界面实例删除的时机应该是程序关闭时。这个在Loader和StackView是不满足的,因为这些当进行界面切换的时候会将原有界面的实例删除,假设界面构造的成本很高(指的是花的时间很长),而且要重复使用,切换的时候就删除了,这样不划算。而自己以前的界面切换方法是满足的。
要满足这些需求,就要尝试在Qt Quick中寻找能够类似C++的new和delete这样的方法。好在Qt Quick提供了在Javascript中创建对象的方法Qt.createComponent和component.createObject,而创建了的对象想要删除也很方便,凡是这样创建的对象,都附带了destroy()方法,十分方便。
于是我花了一些时间制作了这样一个简易的界面切换类,提供类似StackView的使用方法,让我们感觉切换起来很方便。下面是该类的QML代码: