想要达到画页迁移的效果,有很多方法:比如通过loader将qml加载,然后,或者将visible置为false.或者将souce变成空字符串。或者通过动态创建对象,都可以,但是,放到我们实机上这一切都不好使了,这个是为什么?报错都是在将要迁移到子画页时,说无法找到子画页的id,我明明在main.qml里都定义了,这个真的是不清楚。qt creater都没有问题的。后来qml有个控件叫StackView,这个控件就好使。
StackView { id: stack anchors.centerIn: parent parent.width height: parent.height Loader{ id:page_loader_main_menu parent.width height: 600 anchors.right: parent.right anchors.top: parent.top source: "Main_menu.qml" } } Component{ id:main_menu_search_page Loader{ id:page_loader_main_menu_search main_menu_rec.width height: 600 source :"Search_Hot.qml" } } Mini_Player{} Connections{ target: main_menu_control_observer onMain_menu_lift_search_hot:{ stack.push(main_menu_search_page) console.log("depth:",stack.depth) } onSearch_hot_lift_main_menu:{ console.log("return_depth:",stack.depth) if(stack.depth === 1) {stack.clear()} } } }
到这里还没什么太大的问题,反复用C++与qml交互。是因为子画页不识别id,这个让人很无语。现在搞的这么麻烦。当画页迁移到Search_Hot.qml后,居然还能点击根画页的button,导致能够不断的入栈迁移画页。
在Search_Hot.qml中,最上面的位置加入以下代码,防止鼠标穿透
MouseArea{ anchors.fill:parent enabled:true onClicked: {} onPressed: {} onReleased: {} }
不过为什么到实机的时候,动态创建对象都不好用了呢?这个谁能给我解答下?