在QML学习和开发过程中,看到Loader的官方介绍之后,发现Loader就是用来动态加载一个qml或者component的容器。

有一个问题在我脑海里冒了出来:loader加载一个qml或者一个组件,完全可以通过设置这个qml或者组件的visible为true或者false进行显示,那么Loader的强大之处到底在哪里呢?

带着这个问题,浏览了一些资料和代码,最终发现了Loader的一个强大之处–可以对整个组件或者qml进行整体的动态切换,写起来比较简单明了。发现这个功能后,本人就动手用Loader去实现动态切换。

1、Loader的基本参数

关于Loader的基本参数,大家可以通过在qml代码中选中Loader,按F1键查看官方的帮助文档,这里就不多介绍了。
简单介绍一个Loader 加载组件的两种方法:
1.1、加载qml文件

Loader {id:loader
}
loader.source = "MaskWin.qml"

1.2 加载component

Loader {id: loader
}
// 创建一个component
Component {id:testComponent...
}loader.sourceComponent = testComponent;

2、动态切换效果图

实现功能:点击按钮,窗口动态的出现和消失。

3、功能设计思路

1、做一个按钮,用来触发窗口切换
2、创建一个掩码窗口,最终生成一个qml文件
3、创建一个Loader, Loader中添加两种动画,一个是进入,一个是出去。
4、Loader指定qml,触发动画。

4、代码

LoaderSturdy.qml

import QtQuick 2.0
import QtQml 2.12
import QtQuick.Window 2.12Window {id: rootWinwidth: 1000height: 1000color: "blue"visible: false// 创建一个背景为绿色的窗口Rectangle {id: backgroundanchors.fill:parentcolor: "green"}// 创建一个loader对象,包含了两种动画,一个是进入,一个退出Loader {id: loaderNumberAnimation {id: showMasktarget: loader.item  // 动画指定的对象是一个loader的itemproperty: "x"duration: 1000from: -rootWin.widthto: 0easing.type: Easing.InExpo}NumberAnimation {id: hideMasktarget: loader.itemproperty: "x"duration: 1000from: 0to: rootWin.widtheasing.type: Easing.InExpo}}// 显示的时候加载qml,并且设置进入动画为truefunction show() {rootWin.visible = true;loader.source = "MaskWin.qml"showMask.running = true}// 退出的时候,将退出动画设置为truefunction hide() {hideMask.running = true;}
}

Btn.qml

import QtQuick 2.12Rectangle {property bool repeatFlag: falseproperty color textColor: Qt.darker("#56A420", 1)property color backgroundColor: "#004597"radius: 10color: backgroundColorText {id: labelanchors.centerIn: parentfont.pixelSize: 30color: textColortext: !repeatFlag ? "Show" :"Hide"font.bold: true}
}

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQml 2.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")MaskWin {id:maskWindowanchors.fill: parentvisible: false;}Btn {id: loadBtnanchors.top: parent.topanchors.topMargin: 30anchors.left: parent.leftanchors.leftMargin: 30width: 100height: 100radius: 10MouseArea {anchors.fill: parentonClicked: {loadBtn.repeatFlag = !loadBtn.repeatFlagif (loadBtn.repeatFlag) {loaderS.show();} else {loaderS.hide();}}}}LoaderSturdy {id: loaderS}
}

MaskWin.qml

import QtQuick 2.12
import QtQuick.Window 2.12Rectangle {id:maskWincolor: Qt.rgba(0.2,0.2,0.2,0.8)width: 1000height: 1000z: 100MouseArea {anchors.fill: parent}Rectangle {id:showWinvisible: truewidth: parent.width/2height: parent.height/2x: (parent.width - width)/2y: (parent.height - height)/2color: "white"radius: 10}Rectangle {id:exitIconanchors.right: showWin.rightanchors.bottom: showWin.topanchors.bottomMargin: 20width: 40height: 40radius: width/2border.color: "white"border.width: 1color: "transparent"Text {id: canceltext: qsTr("X")anchors.fill: parenthorizontalAlignment: Text.AlignHCenterverticalAlignment: Text.AlignVCenterfont.pixelSize: 30color: "white"}MouseArea {anchors.fill: parentonClicked: {maskWin.visible = false;}}}
}

QML进阶--Loader实现组件的动态切换相关推荐

  1. QML进阶(十)动态加载QML元素

    通过搭配QML和JavaScript我们可以动态的对QML元素的生命周期进行管理.实现动态加载元素.动态实例化元素.动态销毁元素.同时我们还可以将动态创建的元素持久化到本地,并在需要的时候进行恢复使用 ...

  2. QML程序实现动态切换多语言

    原文地址::https://zhuanlan.zhihu.com/p/40815590 Qt程序中实现多语言有Qt自己的一套机制,然而目前在5.9版本下该机制无法在程序运行期间动态切换语言.本文向大家 ...

  3. 5分钟实现动态切换,原来迁徙图还可以这么玩!

    某航空公司领导想看十一假期间北京.上海.广州.深圳等城市的人流量情况,要求用迁徙图展示,默认以北京为出发地,显示由北京到全国各个城市的人流量情况,点击地图上某个城市,可以动态切换该城市为出发地,显示由 ...

  4. VUE动态切换Button的icon

    vue中的组件属性动态赋值可以通过v-bind:属性值 来实现属性值的动态绑定,例如常用的icon上下变动 <el-button v-bind:icon="iconData" ...

  5. 【前端——vue】:过滤器、侦听器、计算属性、vue-cli、vue组件、动态组件、插槽、自定义属性、路由

     一.过滤器 1.过滤器Filters(只能在vue2中使用) p标签里面看到的是后面函数的返回值,message相当于作为参数传给后面.竖线代表要调用过滤器. 过滤器函数必须定义到filters节点 ...

  6. uniapp 动态切换应用图标、名称插件(如新年、国庆等) Ba-ChangeIcon

    动态切换应用图标.名称(如新年.国庆等) Ba-ChangeIcon 简介(下载地址) Ba-ChangeIcon 是一款uniapp动态切换应用图标.名称的插件.可实现过年.过节动态切换应用图标的效 ...

  7. springboot 中动态切换数据源(多数据源应用设计)

    目录 原理图 数据库 项目结构 启动类 entity controller service mapper 配置文件 线程上下文 (DataSourceHolder) 动态数据源 DynamicData ...

  8. android 输入法更换_一种动态切换Android系统输入法的弹出模式的方法与流程

    本发明涉及一种Android系统利用动态切换输入法的弹出模式解决输入法跳闪抖动问题的方法,属于安卓系统技术领域. 背景技术: 随着Android系统的快速发展以及安卓手机的不断普及,基于Android ...

  9. Vue组件之动态组件

    动态组件:不同组件之间进行动态切换,通过 Vue 的 元素加一个特殊的 is attribute 实现 1. 基础使用 component 的 is 属性值是组件名,就可以调用该组件 <comp ...

最新文章

  1. hadoop job 数量_大数据Hadoop常见面/笔试题
  2. ES curl bulk 导入数据
  3. docker rancher搭建
  4. 基于AcrGIS平台实现三维场景下的积水效果动态模拟
  5. 【转】概要设计说明书
  6. Android之编译提示error: Apostrophe not preceded by
  7. ASP.NET Request.UrlReferrer 问题
  8. mysql event同步数据库_mysql 数据库Event定时任务使用详解(Navicat 及直接SQL语句创建)...
  9. bzoj 3308: 九月的咖啡店(最大费用最大流)
  10. IE8 默认以Web Standards模式显示网页 全面遵循Web标准
  11. 11.微信小程序图片操作总结
  12. wifi信号衰减与距离关系_WIFI信号的空间如何衰减 WIFI信号的空间衰减介绍【详解】...
  13. Ubuntu常用软件安装与问题解决(持续更新)
  14. Case Study _均值方差模型 MatLab
  15. ClearCase 介绍 1
  16. word的表格解决左对齐但不在左边,对齐不正常
  17. 学习记录:计算机网络基础知识总结
  18. 安卓多级列表的简单实现
  19. Dart —— 函数 函数参数 匿名函数
  20. 什么是erp软件?erp软件有哪些好用的功能?

热门文章

  1. 钉钉小程序上传预览下载word,pdf文档等一系列问题
  2. 营造好的气氛有助于拍出好的婚纱照
  3. 2023年上海交通大学数院应用统计考研上岸前辈备考经验指导
  4. 艾永亮超级产品:企业家如何锻炼产品思维,这里有三个训练方法论
  5. java遍历数组的三种方式
  6. linux读苹果格式文件,mac os 如何读取 Linux ext4 格式的硬盘
  7. PHP导出word方法(一phpword)
  8. matlab裂纹扩展程序,SMART裂纹扩展实例讲解
  9. 区块链+保险,隐私保护必不可少!
  10. D3.js 第13课 饼状图