QML —— 示例 - Component自定义组件及加载(附完整源码)

示例效果

在这里插入图片描述

介绍

     Component 组件是可重用的、封装的QML类型,具有定义良好的接口。组件通常由组件文件定义,即.qml文件。组件类型本质上允许在QML文档中内联定义QML组件,而不是作为单独的QML文件。这可能有助于重用QML文件中的小组件,或定义逻辑上属于文件中其他QML组件的组件。
     Component 是Qt 封装好的、只暴露必要接口的QML 类型,可以重复利用。一个QML组件就像一个黑盒子,它通过属性、信号、函数和外部世界交互。Component 既可以定义在独立的QML 文件(.qml 为后缀的文件)中,也可以嵌入到其他的QML 文件中来定义。那么这两种方式分别适用于什么场景呢?这里有一个原则可以帮助我们去选择Component 的定义方式:如果一个Component 比较小且只在某个QML文件中使用,或者说一个Component 从逻辑上来看属于某个QML 文档,那么就可以采用嵌入的方式来定义该Component;如果这个Component 有很多地方可以用到,也就是说复用率比较高,那么就可以采用定义在独立的QML 文件中的方式。

     Loader 用于动态加载QML组件。Loader可以加载QML文件(使用source属性)或Component对象(使用sourceComponent属性)。这对于将组件的创建延迟到需要时非常有用:例如,应根据需要创建组件时,或者出于性能原因不应不必要地创建组件时。Loader 可以通过两种方式来加载components,一种是通过source 属性来加载一个qml 文件,另一种是通过sourceComponent 属性来加载。

源码

     main.cpp

import QtQuick 2.12
import QtQuick.Window 2.12Window
{visible: truewidth: 640height: 480title: qsTr("单击隐藏/显示矩形,矩形随鼠标移动")property int rectX: 0property int rectY: 0property int rectW: 20property int rectH: 20Component{id: rectangleComponentRectangle{id: rectIDx: rectXy: rectYwidth: rectWheight: rectHcolor: "pink"}}property bool loaderFlag : falseLoader{id: loaderIDsourceComponent: loaderFlag ? rectangleComponent : undefined}MouseArea{hoverEnabled: trueanchors.fill: parentonPositionChanged:{changeRectPos(mouse.x,mouse.y)}onClicked:{loaderFlag = !loaderFlagchangeRectPos(mouse.x,mouse.y)}function changeRectPos(x,y){if(loaderFlag){rectX = x - rectW / 2rectY = y - rectH / 2}}}
}

关注

笔者 - jxd

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC(day1)

什么是MVC MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean:专门存储业务数据…

Vue-4、单向数据绑定与双向数据绑定

1、单向数据绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>数据绑定</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/…

Linux下安装JET2

0. 说明&#xff1a; JET2是一个基于Joint Evolutionary Trees的利用序列和结构信息预测蛋白质界面的软件&#xff0c;详情见: http://www.lcqb.upmc.fr/JET2/JET2.html&#xff0c;http://www.lgm.upmc.fr/JET/JET.html 和 https://doi.org/10.1371/journal.pcbi.1004580 本…

老鸟总结,性能测试-常用指标/指标评估及/通过标准(超级细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能压测–常用…

求求你,别再乱用@Transactional了

求求你&#xff0c;别再乱用Transactional了 文章目录 &#x1f50a;先看个问题&#x1f4d5;情况1情况1结果 &#x1f5a5;️情况2情况2结果 &#x1f4dc; 情况三情况3结果 &#x1f4d8;情况4情况4结果 &#x1f516;先说结论情况1结果情况2结果情况3结果情况4结果&#x1f…

Linux查看物理CPU个数、核数、逻辑CPU个数

文章目录 总核数总逻辑CPU数查看物理CPU个数查看每个物理CPU中core的个数(即核数)查看逻辑CPU的个数 总核数 总核数 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep “…

探讨JS混淆技术及其加密解密实例

引言 在当前计算机科学领域中&#xff0c;保护软件代码的安全性和隐私性变得愈发重要。为了防止黑客攻击和恶意软件分析&#xff0c;开发人员采用各种技术来混淆和加密其代码&#xff0c;其中包括JS混淆技术。本文将介绍JS混淆技术的原理和应用&#xff0c;并提供一些相关的加密…

Tailscale 基础教程:Headscale 的部署方法和使用教程

Tailscale 是一种基于 WireGuard 的虚拟组网工具&#xff0c;它在用户态实现了 WireGuard 协议&#xff0c;相比于内核态 WireGuard 性能会有所损失&#xff0c;但在功能和易用性上下了很大功夫&#xff1a; 开箱即用 无需配置防火墙没有额外的配置 高安全性/私密性 自动密钥轮…

俏生元把握大健康行业发展趋势 构建居家悦己健康消费升级

健康与美丽是女性长久的必修课&#xff0c;近年来&#xff0c;消费者的养生需求不断增长。女性健康品牌俏生元把握大健康行业发展大趋势&#xff0c;聚力女性健康领域构建居家健康消费业态&#xff0c;做好女性健康管理顾问&#xff0c;让消费者从大健康跃进美好生活。 俏生元…

计算机毕业设计选题分享-SSM书籍借阅管理系统04770(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM书籍借阅管理系统 摘 要 随着科学技术的告诉发展&#xff0c;我们已经步入数字化、网络化的时代。图书馆是学校的文献信息中心&#xff0c;是为全校教学和科学研究服务的学术性机构&#xff0c;是学校信息化的重要基地。图书馆的工作是学校和科学研究工作的重要组成部分&…

statsmodels.tsa 笔记 detrend(去趋势)

1 基本使用方法 statsmodels.tsa.tsatools.detrend(x, order1, axis0) 2 参数说明 x数据。如果是二维数组&#xff0c;那么每一行或每一列将独立地去除趋势&#xff0c;但趋势的阶数是一样的。order趋势的多项式阶数。0 表示常数趋势&#xff08;即没有趋势&#xff09;&…

Java学习笔记-day02-在IDEA中使用git忽略提交.idea下的文件

1.在根目录.gitignore文件排除.idea目录 ### IntelliJ IDEA ### .idea2.使用重置Head还原已经add过的文件 创建项目时&#xff0c;可能会有.idea中的文件先add到git后再创建的.gitignore文件&#xff0c;导致文件commit时无法排除&#xff0c;如下所示。 使用重置Head将文件…