QML-Loader
1、定义
可以把Loader当做一个占位符,即占有屏幕的某一个空间,当加载了组件之后,这个空间就能显示相应的图形了。所以可以给Loader设置anchor布局
2、加载组件
source:加载QML文档
sourceComponent:加载Component组件
注意:同一时刻只能加载一个对象,加载了新的对象之后,上次对象将被销毁;source为空或者sourceCompnent为undefined时【这也是销毁的办法】,会销毁当前加载的对象
3、手册
注意:item指向的是加载的组件的顶层Item
4、使用Loader动态切换界面
①、main.qml
import QtQuick 2.9 import QtQuick.Window 2.2 Window { id: mainWin visible: true width: 640 height: 480 title: qsTr("Hello World") LoginPage { width: 300 height: 200 anchors.centerIn: parent } }
②、LoginPage.qml
import QtQuick 2.0 import QtQuick.Controls 2.3 Rectangle { id: loginPage width: 400 height: 300 color: "#051f58" radius: 8 clip:true Button { text: "登录页面-登录按钮" anchors.centerIn: parent onClicked: { // 先隐藏登录页面 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.3 Rectangle { id: mainPage color: "#498ff8" radius: 8 Button { text: "主页面-返回按钮" anchors.centerIn: parent onClicked: { // 先隐藏主页面 mainPage.visible = false // 在主窗口上显示登录页面 var compLogin = Qt.createComponent("LoginPage.qml") .createObject(mainWin, {x:100, y:100, width:500, height:350}); } } }
也可以设置两个state分别对应两个qml,不同点击切换不等state
代码参考:https://www.cnblogs.com/linuxAndMcu/p/13566502.html
5、获取Loader的qml对象
var obj = loader.item;
PS:
1、注意Loader加载qml的时候,是以当前路径去查找qml的,如:在A.qml中定义Loader去加载当前文件夹B下的B.qml,需要写成:source:"./B/B.qml",或者qrc形式
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2016-08-11 svn的使用