Loader QML Type

news2024/11/15 12:08:50

文章目录

  • Loader QML Type
  • 描述
    • 属性(Properties)
      • active : bool
      • asynchronous : bool(异步)
      • item : object
      • progress : real
      • source : url
      • sourceComponent : Component
      • status : enumeration
    • 信号(Signal Documentation)
    • 方法(Method Documentation)
      • object setSource(url source, object properties)
    • loader 尺寸方面的行为
    • 从loader 里面收到信号
    • Focus and Key Events(聚焦和键盘事件)
    • Using a Loader within a View Delegate(使用一个视图代理 和 Loader一起)

Loader QML Type

允许从URL或组件动态加载子树。
导入方式:import QtQuick 2.11
继承于:Item

描述

加载器用于动态加载QML组件。

加载器可以加载QML文件(使用source属性)或Component对象(使用sourceComponent属性)。它有助于将组件的创建推迟到需要的时候:例如,当应该按需创建组件时,或者当出于性能原因不应该不必要地创建组件时。

这是一个加载器,当单击鼠标区域时,它会加载“Page1.qml”作为组件:

 import QtQuick 2.0

  Item {
      width: 200; height: 200

      Loader { id: pageLoader }

      MouseArea {
          anchors.fill: parent
          onClicked: pageLoader.source = "Page1.qml"
      }
  }

可以使用item属性访问加载的对象。

如果源或sourceComponent发生更改,则任何先前实例化的项都将被销毁。将源设置为空字符串或将sourceComponent设置为undefined会破坏当前加载的对象,释放资源并使加载器为空。

属性(Properties)

active : bool

如果加载器当前处于活动状态,则此属性为真。此属性的默认值为true。
如果加载器处于非活动状态,则在加载器处于活动状态之前,更改源或源组件不会导致项目被实例化。
将该值设置为非活动状态将导致加载器加载的任何项目被释放,但不会影响源或源组件。非活动加载器的状态始终为空。

asynchronous : bool(异步)

此属性保存组件是否将异步实例化。默认情况下,它为false。
当与源属性结合使用时,加载和编译也将在后台线程中执行。
异步加载会在多个帧中创建组件声明的对象,并降低动画中出现故障的可能性。异步加载时,状态将更改为Loader.Loaderling 一旦创建了整个组件,该项目将可用,状态将更改为Loader.Ready
在异步加载过程中将此属性的值更改为false将强制立即同步完成。这允许开始异步加载,然后在异步加载完成之前必须访问加载器内容时强制完成。

注意:为了避免项目被逐渐加载请适当设置可见

  Loader {
      source: "mycomponent.qml"
      asynchronous: true
      visible: status == Loader.Ready
  }

请注意,此属性仅影响对象实例化;它与通过网络异步加载组件无关。

item : object

此属性保存当前加载的顶级对象

progress : real

此属性保存从网络加载QML数据的进度,从0.0(未加载)到1.0(已完成)。大多数QML文件都很小,因此该值将从0快速更改为1。

source : url

此属性保存要实例化的QML组件的URL。

从QtQuick 2.0开始,Loader可以加载任何类型的对象;它不限于项目类型。

要卸载当前加载的对象,请将此属性设置为空字符串,或将sourceComponent设置为undefined。将源设置为新的URL也会导致卸载由上一个URL创建的项目。

sourceComponent : Component

此属性保存要实例化的组件。

Item {
      Component {
          id: redSquare
          Rectangle { color: "red"; width: 10; height: 10 }
      }

      Loader { sourceComponent: redSquare }
      Loader { sourceComponent: redSquare; x: 10 }
  }

要卸载当前加载的对象,请将此属性设置为undefined。

从QtQuick 2.0开始,Loader可以加载任何类型的对象;它不限于项目类型。

status : enumeration

This property holds the status of QML loading. It can be one of:

  • Loader.Null 加载器处于非活动状态或未设置QML源
  • Loader.Ready - QML源已加载
  • Loader.Loading - QML源当前正在加载
  • Loader.Error - 加载QML源时出错

使用此状态提供更新或以某种方式响应状态更改
举例
触发一个状态改变

  State { name: 'loaded'; when: loader.status == Loader.Ready }

实现onStatusChanged信号处理程序:

  Loader {
      id: loader
      onStatusChanged: if (loader.status == Loader.Ready) console.log('Loaded')
  }

绑定到状态值:

  Text { text: loader.status == Loader.Ready ? 'Loaded' : 'Not loaded' }

请注意,如果源是本地文件,则状态最初将为“就绪”(或“错误”)。虽然在这种情况下不会有onStatusChanged信号,但onLoaded仍将被调用。

信号(Signal Documentation)

loaded()

当状态变为Loader时,会发出此信号。准备就绪,或初始加载成功。
相应的处理程序为onLoaded。

方法(Method Documentation)

object setSource(url source, object properties)

创建具有给定属性的给定源组件的对象实例。properties参数是可选的。加载和实例化完成后,可以通过item属性访问实例。
如果调用此函数时活动属性为false,则不会加载给定的源组件,但会缓存源和初始属性。当加载器处于活动状态时,将创建一个源组件的实例,并设置初始属性。
以这种方式设置组件实例的初始属性值不会触发任何关联的行为。
请注意,如果在调用此函数后但在将加载器设置为活动状态之前更改了源或源组件,则缓存的属性将被清除。

loader 尺寸方面的行为

如果源组件不是Item类型,则Loader不会应用任何特殊的大小规则。当用于加载视觉类型时,Loader应用以下大小规则:

如果没有为加载器指定明确的大小,则加载组件后,加载器会自动调整为加载项的大小。

如果通过设置宽度、高度或锚定明确指定了加载器的大小,则加载的物品将调整为加载器的大小。

在这两种情况下,项目和加载器的大小是相同的。这确保了锚定到装载机上相当于锚定到所装载的物品上。

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    visible: true
    id: root
    width: 200
    height: 200

    Loader {
        // Explicitly set the size of the
        // Loader to the parent item's size
        anchors.fill: parent
        sourceComponent: rect
    }

    Component {
        id: rect
        Rectangle {
            width: 50
            height: 50
            color: "red"
        }
    }
}

在这里插入图片描述
红色矩形的大小将与根项目的大小相同。

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    visible: true
    width: 200
    height: 200

    Loader {
        // position the Loader in the center
        // of the parent
        anchors.centerIn: parent
        sourceComponent: rect
    }

    Component {
        id: rect
        Rectangle {
            width: 50
            height: 50
            color: "red"
        }
    }
}

在这里插入图片描述

红色矩形将为50x50,位于根项目的中心。

从loader 里面收到信号

可以使用Connections类型接收从加载对象发出的任何信号。例如,以下application.qml加载MyItem.qml,并能够通过Connections对象从加载的项目接收消息信号:
application.qml


  import QtQuick 2.0

  Item {
      width: 100; height: 100

      Loader {
         id: myLoader
         source: "MyItem.qml"
      }

      Connections {
          target: myLoader.item
          onMessage: console.log(msg)
      }
  }

MyItem.qml


  import QtQuick 2.0

  Rectangle {
     id: myItem
     signal message(string msg)

     width: 100; height: 100

     MouseArea {
         anchors.fill: parent
         onClicked: myItem.message("clicked!")
     }
  }

或者,由于MyItem.qml是在Loader的作用域内加载的,它也可以直接调用Loader或其父Item中定义的任何函数。

Focus and Key Events(聚焦和键盘事件)

加载器是一个焦点范围。它的focus属性必须设置为true,以便它的任何子项都能获得活动焦点。加载项中收到的任何关键事件也应该被接受,这样它们就不会传播到加载器。

例如,当单击鼠标区域时,以下application.qml会加载KeyReader.qml。请注意,加载器的focus属性以及动态加载对象中的Item都设置为true:

application.qml


  import QtQuick 2.0

  Rectangle {
      width: 200; height: 200

      Loader {
          id: loader
          focus: true
      }

      MouseArea {
          anchors.fill: parent
          onClicked: {
              loader.source = "KeyReader.qml"
          }
      }

      Keys.onPressed: {
          console.log("Captured:",
                      event.text);
      }
  }

KeyReader.qml

import QtQuick 2.0

  Item {
      Item {
          focus: true
          Keys.onPressed: {
              console.log("KeyReader captured:",
                          event.text);
              event.accepted = true;
          }
      }
  }

加载KeyReader.qml后,它接受关键事件并将event.accepted设置为true,这样事件就不会传播到父矩形。

Using a Loader within a View Delegate(使用一个视图代理 和 Loader一起)

在某些情况下,您可能希望在视图委托中使用加载器来提高委托加载性能。这在大多数情况下都很有效,但有一个重要的问题需要注意,这与组件的创建上下文有关。

在以下示例中,Text将无法访问ListView插入delegateComponent上下文中的索引上下文属性,因为加载器在实例化myComponent时将其创建上下文用作父上下文,而索引不引用该上下文链中的任何内容。


  Item {
      width: 400
      height: 400

      Component {
          id: myComponent
          Text { text: index }    //fails
      }

      ListView {
          anchors.fill: parent
          model: 5
          delegate: Component {
              id: delegateComponent
              Loader {
                  sourceComponent: myComponent
              }
          }
      }
  }

myComponent 无法访问 将被将被加载但是没有被加载到的控件属性

delegate: Component {
              Loader {
                  sourceComponent: Component {
                      Text { text: index }    //okay
                  }
              }
          }

或这加载成一个单独的文件

  delegate: Component {
              Loader {
                  source: "MyComponent.qml" //okay
              }
          }

注意 单独的文件 在代码编译的时候 实际上是展开在其内部的

显式地将所需信息设置为Loader的属性(这是有效的,因为Loader将自己设置为它正在加载的组件的上下文对象)。

 Item {
      width: 400
      height: 400

      Component {
          id: myComponent
          Text { text: modelIndex }    //okay
      }

      ListView {
          anchors.fill: parent
          model: 5
          delegate: Component {
              Loader {
                  property int modelIndex: index
                  sourceComponent: myComponent
              }
          }
      }
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四,搭建环境:表述层

四,搭建环境:表述层 文章目录 四,搭建环境:表述层设定 Web 工程web.xml 的配置编写配置 ContextLoaderListener配置 DispatcherServlet配置 CharacterEncodingFilter配置 HiddenHttpMethodFilter 配置 Spring MVC配置视图解析相关…

【JKI SMO】框架讲解(九)

本节内容将演示如何向SMO框架添加启动画面。 1.打开LabVIEW新建一个空白项目,并保存。 2.找到工具,打开SMO Editor。 3.新建一个SMO,选择SMO.UI.Splash。 4. 打开LabVIEW项目,可以看到项目里多了一个SystemSplash类。 打开Process…

c++11-lambda表达式,包装器function,bind

lambda表达式 lambda表达式在很多语言都是有的,c当然是有的,但是像C语言就没有这个。和很多语言相同c的lambda表达式都是为了简化代码,当我们需要传函数的时候我们就可以用lambda表达式写一个匿名函数。 书写格式: [capture-li…

【Log4j2】代码执行漏洞复现!

执行以下命令 启动命令 systemctl start dockercd vulhub/log4j/CVE-2021-44228docker-compose up -d # 访问网址 http://192.168.3.42:xxxx/solr/#/ 启动靶场环境并在浏览器访问!!! 先在自己搭建的DNSLOG平台上获取一个域名来监控我们注入的效果. 可以发现 /solr…

人工智能:所有144本SCI期刊都在这里(20本Top,4本On Hold)

本周投稿推荐 SCI&EI • 4区“水刊”,纯正刊(来稿即录) • CCF-B类,IEEE一区-Top(3天初审) EI • 各领域沾边均可(2天录用) 知网(CNKI)、谷歌学术 …

CS61C | lecture5

CS61C | lecture5 浮点数的表示 用一个小数点作为边界分隔整数部分和小数部分。 10.101 0 2 1 2 1 1 2 − 1 1 2 − 3 2.62 5 10 10.1010_{2}1\times2^11\times2^{-1}1\times2^{-3}2.625_{10} 10.10102​12112−112−32.62510​ Scientific Notation(Binary) 单精度…

.JPG图片,各种压缩率下的文件尺寸

测试结果 不改变图片幅面的情况下,cv2 jpg压缩算法: 默认quality是9550时,相应的图片尺寸是95的1/3 可用。25时,图片尺寸是1/4,仍可用。 2024/07/31 16:31 85,305 out_10.jpg 2024/07/31 16:31 …

不要怕,手把手带你做好小程序关键词优化

要想让小程序在众多同类中脱颖而出,吸引更多的用户,就必须进行有效的关键词优化。优化小程序关键词是提升小程序搜索排名和吸引目标用户的重要手段。以下是一些优化小程序关键词的具体步骤和策略: 一、关键词研究与选择 1.了解用户搜索习惯…

文件解析漏洞

IIS解析漏洞 在windows Server 2003安装iis 1.IIS6.X 1.1 目录解析 在网站下建立文件夹的名字为 .asp/.asa 的文件夹&#xff0c;其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 先创建一个1.asp文件夹 再创建一个1.txt 里面写 <%now()%> 2.1 畸形文件…

go test单元测试

go test Go语言中的测试依赖go test命令。 go test 命令是用来运行测试代码的工具。测试代码通常与要测试的代码放在同一个包中&#xff0c;并且测试文件通常以 _test.go 结尾。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内&#xff0c;所有以_tes…

中国星坤拨码开关系列:为电子设备控制的提供可靠连接

在电子设备日益复杂的今天&#xff0c;控制和设置的简便性成为了用户体验的关键。中国星坤推出的拨码开关以其直观的操作界面和高可靠性&#xff0c;正在引领电子设备控制的新纪元。本文将深入探讨星坤拨码开关的主要特性、应用场景及其在现代电子设备中的重要性。 直观的人机界…

连接器表面缺陷检测方案

连接器是一种用于连接电子设备或电路中不同部件之间的组件&#xff0c;通常用于传输电力、信号或数据。连接器的设计和类型各不相同&#xff0c;以适应不同设备和应用的需求。连接器用于连接电子设备之间的电线、电缆或电路板&#xff0c;实现信号传输和电力供应。连接器设计应…

教育杂志教育杂志社教育编辑部2024年第18期目录

卷首语 “浙”里启程&#xff0c;一路“黔”行 张国军; 1 特别关注 普通高中高质量发展的九大要素——以江苏省通州湾中学为例 徐新民; 4-9 专题策划 “四史”教育融入初中历史教育教学活动探索 陈清波; 10-12 新时代加强师德师风建设的实践与认识 吴东林; 13-…

免费获取Windows7专业版ISO镜像!附上详细安装教程

Windows7专业版系统相比家庭版功能更加完善和强大&#xff0c;支持加强的网络功能、高级备份功能、位置感知打印、加密文件系统等多项安全功能&#xff0c;还有Windows XP模式、脱机文件夹和移动中心等便捷功能&#xff0c;特别适合技术爱好者和中小企业用户安装使用。以下系统…

python之贪吃蛇

废话不多说&#xff0c;直接上代码&#xff08;确保已经安装 pygame&#xff09; import pygame import random# 基础设置 # 屏幕高度 SCREEN_HEIGHT 480 # 屏幕宽度 SCREEN_WIDTH 600 # 小方格大小 GRID_SIZE 20# 颜色设置 WHITE (255, 255, 255) BLACK (0, 0, 0) GREEN…

关于 Postman 这些你都知道吗?

Postman是接口测试工具&#xff0c;在做接口测试的时候&#xff0c;Postman相当于一个客户端&#xff0c;它可以模拟用户发起的各种http请求&#xff0c;将请求的数据发送到服务端&#xff0c;获取对应的结果&#xff0c;从而测试接口是否能够满足业务功能要求&#xff0c;很直…

# mongodb副本集,执行 rs.addArb(“172.18.30.110:27019“) 添加仲裁节点,客户端卡住,半天没有反应,解决方法

mongodb副本集&#xff0c;执行 rs.addArb(“172.18.30.110:27019”) 或者rs.add(“172.18.30.110:27019”, true) 添加仲裁节点&#xff0c;客户端卡住&#xff0c;半天没有反应&#xff0c;解决方法 1、可以退出主节点后&#xff0c;重新登录&#xff0c; # Ctrl C 或者&a…

高效学术翻译:2024五大工具助你攻克语言难题!

在学术研究领域&#xff0c;阅读和翻译外文文献是每位学者必备的基本功。然而&#xff0c;语言障碍往往成为制约学术发展的瓶颈。为了帮助广大研究人员提高学术翻译效率&#xff0c;本文将为您推荐五款实用的学术翻译工具 Foxit在线翻译&#xff1a;随时随地&#xff0c;轻松翻…

就业!——AI 带来的新职业

在人工智能时代&#xff0c;人工智能不仅改变了我们的生活方式&#xff0c;也为人类带来了许多全新的就业机会。这些新机会主要体现在以下几个方面。 1、人工智能相关技术研发与应用 算法工程师专注于设计、构建及优化多样化的算法体系&#xff0c;旨在赋能并强化人工智能系统…