静态

一、隐藏法

本质上各页面都存在,只是某些隐藏,某些显示,当某一触发条件满足时,设置对应页面的显示和隐藏。

main.qml
------------------------------------
import QtQuick 2.9
import QtQuick.Window 2.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")// 主页面一开始设置"隐藏",登录成功后才显示MainPage {id: mainPagewidth: 500height: 350visible: false // 设置"隐藏"anchors.centerIn: parent}LoginPage {id: loginPagewidth: 300height: 200anchors.centerIn: parent}
}LoginPage.qml
------------------------------------
import QtQuick 2.0
import QtQuick.Controls 2.3Rectangle {width: 400height: 300color: "#051f58"radius: 8Button {text: "登录页面-登录按钮"anchors.centerIn: parentonClicked: {loginPage.visible = falsemainPage.visible = true}}
}MainPage.qml
------------------------------------
import QtQuick 2.0
import QtQuick.Controls 2.3Rectangle {color: "#498ff8"radius: 8Button {text: "主页面-返回按钮"anchors.centerIn: parentonClicked: {loginPage.visible = truemainPage.visible = false}}
}

二、利用 StackView、SwipeView

参考:Qt Quick之StackView详解(1)

动态

一、使用Loader动态加载QML组件

Loader 元素用来动态加载可见的 QML 组件,它可以加载一个 QML 文件(使用 source 属性)或者一个组件对象(使用 sourceComponent 属性)。具体可以参考:QML 使用Loader动态加载组件

代码如下:

main.qml
------------------------------------
import QtQuick 2.9
import QtQuick.Window 2.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")// 1. Loader加载不同组件,实现切换页面的功能Loader{id:myLoaderanchors.centerIn: parent // 弹出的界面都居中显示}Component.onCompleted: myLoader.sourceComponent = loginPage // 一开始显示登录页面// 2. 登录页面-ComponentComponent{id:loginPageLoginPage {width: 300height: 200anchors.centerIn: parent}}// 3.主页面-ComponentComponent{id:mainPageMainPage {width: 500height: 350anchors.centerIn: parent}}
}LoginPage.qml
------------------------------------
import QtQuick 2.0
import QtQuick.Controls 2.3Rectangle {width: 400height: 300color: "#051f58"radius: 8Button {text: "登录页面-登录按钮"anchors.centerIn: parentonClicked: myLoader.sourceComponent = mainPage // 切换显示主页面}
}MainPage.qml
------------------------------------
import QtQuick 2.0
import QtQuick.Controls 2.3Rectangle {color: "#498ff8"radius: 8Button {text: "主页面-返回按钮"anchors.centerIn: parentonClicked: myLoader.sourceComponent = loginPage // 切换显示登录页面}
}

二、利用 createComponent 创建并切换

main.qml
------------------------------------
import QtQuick 2.9
import QtQuick.Window 2.2Window {id: mainWinvisible: truewidth: 640height: 480title: qsTr("Hello World")LoginPage {width: 300height: 200anchors.centerIn: parent}
}LoginPage.qml
------------------------------------
import QtQuick 2.0
import QtQuick.Controls 2.3Rectangle {id: loginPagewidth: 400height: 300color: "#051f58"radius: 8clip:trueButton {text: "登录页面-登录按钮"anchors.centerIn: parentonClicked: {// 先隐藏登录页面loginPage.visible = false// 在主窗口上显示主页面var compMain = Qt.createComponent("MainPage.qml").createObject(mainWin, {x:50, y:50, width:500, height:350});}}
}MainPage.qml
------------------------------------
import QtQuick 2.0
import QtQuick.Controls 2.3Rectangle {id: mainPagecolor: "#498ff8"radius: 8Button {text: "主页面-返回按钮"anchors.centerIn: parentonClicked: {// 先隐藏主页面mainPage.visible = false// 在主窗口上显示登录页面var compLogin = Qt.createComponent("LoginPage.qml").createObject(mainWin, {x:100, y:100, width:500, height:350});}}
}

本来应该使用compLogin.destroy()来销毁登录页面以达到关闭的效果,同时节省内存,奈何学艺不精试了下没有实现好,故先暂时使用"隐藏"的方法。

使用场景分析

如果想记录上一页的操作,可以使用静态的方式,比如设置用户名的页面,切换到下一页,但也可能返回到上一页。

如果想每次进入页面时,一切从新开始,不想记录任何信息,则使用动态方式。比如登录类切换,登录后一切都应该从新开始。

QML 界面切换的几种方法相关推荐

  1. android activity切换动画关闭,Activity取消界面切换的默认动画方法(推荐)

    一般启动一个新的activity都默认有切换的动画效果,比如界面从右至左的移动. 但是有些时候我们不需要这个动画,怎么办? 操作方法比较麻烦,这里我推荐其中一种.我这里是要做启动页splash到首页h ...

  2. DLL中资源切换的两种方法

    DLL中资源切换的两种方法 方法1 AFX_MANAGE_STATE(AfxGetAppModuleState());                // MFC扩展dll 或 AFX_MANAGE_ ...

  3. CSS实现导航条Tab切换的三种方法

    前面的话 导航条Tab在页面中非常常见,本文说详细介绍CSS实现导航条Tab的三种方法 布局   根据上图所示,先规定几个定义,上图的模块整体叫做导航,由导航标题和导航内容组成.要实现上图所示的布局效 ...

  4. python箭头向下怎么变_实现点击下箭头变上箭头来回切换的两种方法【推荐】

    我所知道的常用的就这两种. 第一种:说明一下我用的是fontawesome字体,首先要去官网下载来用 我用的是bootstrap,所以hidden是自带的,上面的初始状态就是下箭头angle-down ...

  5. 【PyQt】pyqt加载调用ui界面文件的两种方法

    使用PyQt开发界面软件,自然会用到Qt Designer进行界面设计,拖拖按钮.设置菜单什么的,然后保存为 .ui 文件.但是在 Python 代码里面如何使用这些 .ui 文件呢? 有两种方法: ...

  6. Javascript获取Html界面元素的几种方法

    在Javascript,可以通过多种方式获取Html元素对象.以下是一个Html页面示例. <body> <form name="form1" method=&q ...

  7. 【网页前端实现多张图片轮播或者切换】三种方法实现

    多张图片轮播 今天我们主要用三种方式实现多张图片轮播,运用的语言是web中的html,使用软件是HBuilder. 达到以下这种效果:![可以通过下方原点点击或者左右两侧点击进行图片的切换](http ...

  8. Qml界面切换时,字体消失或乱码

    文章目录 前言 效果图 原因分析 解决方案 前言 最近开发qml 桌面应用时,在同事的 win8系统 系统上,字体会离奇消失或者乱码,在win7, win10上面就不会有这个问题,我自己下的win8也 ...

  9. Maya中英切换的两种方法

    一种是系统变量法: 打开文件资源管理器 控制面板\系统和安全\系统,点击高级系统设置,点击高级,再点击环境变量 新建环境变量,变量名输入[MAYA_UI_LANGUAGE], 变量值输入[zh_CN] ...

最新文章

  1. 【AI-1000问】为什么OpenCV读取的图像格式是BGR?
  2. vue全局路由守卫beforeEach
  3. Linux Shell常用技巧(三)
  4. 找一个程序员当男朋友是什么样的体验?
  5. paddleocr常见问题(3)
  6. java switch语句与switch表达式区别及使用
  7. 数据库系列学习(三)-数据的增、删、改
  8. 跟我学Spring Cloud(Finchley版)-18-Zuul深入
  9. Vim下的插件管理工具pathogen简介
  10. OpenStack组件——Nova计算资源管理
  11. Python学习之面向对象(一)
  12. Python批量下载MOOC课件
  13. win7下cmd乱码
  14. Vscode 配置cmake
  15. Python爬取新笔趣阁小说
  16. 输入日期,查看当天是星期几
  17. 免费图片转pdf的方法?学会图片转pdf很重要
  18. 初学者怎么记‘A‘,‘a‘,空格的ascii码?
  19. Stable Diffusion 图像生成测试
  20. 把生活过成 你想要的样子

热门文章

  1. java使用xml存储数据_聊一聊 Redis 数据内部存储使用到的数据结构
  2. java web 线程_多线程在javaweb中的应用
  3. exit java_没有System.exit,如何退出Java程序?(通过用户输入?)
  4. linux var目录满了,Linux入门教程:/var/spool/clientmqueue 占满根目录
  5. hexo评论_Hexo系列 | Hexo的基本使用
  6. java 模板引擎_Spring Boot 如何快熟整合Thymeleaf模板引擎
  7. 过于离谱,我实现憋不住了!
  8. easyui数据请求两个url_easyui使用是调用两次后台请求(解决)
  9. 软件测试与开发专业就业方向,学习软件测试后就业方向有哪些?
  10. python共享文件权限_利用Python实现在同一网络中的本地文件共享方法