一、概念

Component是由Qt框架封装好的,只暴露了必要接口的QML类型,可以重复使用。一个QML组件就像一个黑盒子,它通过属性、信号、函数和外部世界交互。

一个Component既可以定义在单独的QML文件中,也可以嵌入到其他的QML文档中来定义。

嵌入式定义组件

import QtQuick 2.2Rectangle {width: 320;height: 240;color: "#C0C0C0";......Component {id: colorComponent;Rectangle {id: colorPicker;width: 50;height: 30;signal colorPicked(color clr);MouseArea {anchors.fill: parent;onPressed: colorPicker.colorPicked(colorPicker.color);}}}......}
  • Component只能包含一个顶层Item(本例中是Rectangle),而且在这个Item之外不能定义任何数据,除了id;
  • 在顶层Item之内,则可以包含更多的子元素来协同工作,最终形成一个具有特定功能的组件;

在单独文件中定义组件

//ColorPicker.qml
import QtQuick 2.2Rectangle {id: colorPicker;width: 50;height: 30;signal colorPicked(color clr);function configureBorder() {    //设置边框的宽度和颜色colorPicker.border.width = colorPicker.focus ? 2 : 0;colorPicker.border.color = colorPicker.focus ? "#90D750" : "#808080";}MouseArea {anchors.fill: parent;onClicked: {colorPicker.colorPicked(colorPicker.color);mouse.accepted = true;colorPicker.focus = true;}}Keys.onReturnPressed: {colorPicker.colorPicked(colorPicker.color);event.accepted = true;}Keys.onSpacePressed: {colorPicker.colorPicked(colorPicker.color);event.accepted = true;}onFocusChanged: {configureBorder();}Component.onCompleted: {configureBorder();}}

单独文件中定义组件与嵌入式定义组件代码结构明显不同:Component对象不见了!
在单独文件定义组件,不需要Component对象,只有在其它QML文档中嵌入式定义组件时才需要Component对象;
注意:定义Component组件时需要遵守一个约定:组件名必须和QML文件名一致,首字母必须大写;

单独文件定义组件的使用

//main.qml
import QtQuick 2.12
import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480Rectangle {width: 320;height: 240;color: "#EEEEEE";Text {id: coloredText;anchors.horizontalCenter: parent.horizontalCenter;anchors.top: parent.top;anchors.topMargin: 4;text: qsTr("Hello World!");font.pixelSize: 32;}function setTextColor(clr) {coloredText.color = clr;}ColorPicker {id: redColor;color: "red";focus: true;anchors.left: parent.left;anchors.leftMargin: 4;anchors.bottom: parent.bottom;anchors.bottomMargin: 4;KeyNavigation.right: blueColor;KeyNavigation.tab: blueColor;onColorPicked: {coloredText.color = clr;}}ColorPicker {id: blueColor;color: "blue";anchors.left: redColor.right;anchors.leftMargin: 4;anchors.bottom: parent.bottom;anchors.bottomMargin: 4;KeyNavigation.left: redColor;KeyNavigation.right: pinkColor;KeyNavigation.tab: pinkColor;}ColorPicker {id: pinkColor;color: "pink";anchors.left: blueColor.right;anchors.leftMargin: 4;anchors.bottom: parent.bottom;anchors.bottomMargin: 4;KeyNavigation.left: blueColor;KeyNavigation.tab: redColor;onColorPicked: {coloredText.color = clr;}}Component.onCompleted: {blueColor.colorPicked.connect(setTextColor);pinkColor.colorPicked.connect(setTextColor);}}}

Component(组件)的创建相关推荐

  1. Salesforce Lightning开发学习(二)Component组件开发实践

    lightning的组件区分标准组件.自定义组件和AppExchange组件.标准组件由SF提供,自定义组件由developer自行开发,AppExchange组件由合作伙伴建立.下面我们写一个简单的 ...

  2. vue教程2 【Vue组件化编程】 组件的创建和使用 非单文件组件和单文件组件的区别

    组件 实现局部功能的代码和资源的集合 非单文件组件 1.定义组件(创建组件) 2.注册组件 3.使用组件(写组件标签) 定义 使用Vue.extend(options)创建,其中options和new ...

  3. spring aop组件_安全性中的Spring AOP –通过方面控制UI组件的创建

    spring aop组件 以下文章将显示在我参与的一个项目中,我们如何使用Spring的AOP来介绍一些与安全性相关的功能. 这样的概念是,为了使用户能够看到某些UI组件,他需要具有一定级别的安全特权 ...

  4. 安全性中的Spring AOP –通过方面控制UI组件的创建

    以下文章将显示在我参与的一个项目中,我们如何使用Spring的AOP来介绍一些与安全性相关的功能. 这样的概念是为了使用户能够看到一些UI组件,他需要具有一定级别的安全特权. 如果不满足该要求,则不会 ...

  5. vue - 组件的创建

    组件的创建 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使 ...

  6. 【Vue】组件的创建以及 data methods 属性的使用

    本文我们来介绍下Vue中的组件,组件是可复用的 Vue 实例,且带有一个名字. 组件的创建 extend方式 首先通过 Vue.extend 方法来定义一个全局组件.template 就是组件将来要展 ...

  7. ECS之Component组件

    洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,最近在跟着大智学习DOTS. Entity之后,咱们来到了Component组件.Component是ECS架构的三个基本元素之 ...

  8. Java单元测试实践-11.Mock后Stub Spring的@Component组件

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Sprin ...

  9. 《UnityAPI.Component组件》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+GetComponent+SendMessage+Tag+立钻哥哥++OK++)

    <UnityAPI.Component组件> 版本 作者 参与者 完成日期 备注 UnityAPI_Component_V01_1.0 严立钻 2020.05.26 #<UnityA ...

  10. 微信小程序显示loading效果,微信小程序节流效果,微信小程序生命周期,微信小程序组件的创建与使用

    一.显示loading效果 文档地址:wx.showLoading(Object object) | 微信开放文档 请求前 显示loading 效果,请求结束后隐藏loading // 在请求模块中 ...

最新文章

  1. R语言dataframe合并函数merge实战
  2. Nginx面试!mysql时间类型以及获取当前时间,干货满满
  3. 全球有多少 C/C++ 程序员?Java 和 Python 又有多少?
  4. Android Studio的Model代码插件开发
  5. python函数递归求和详解_Python递归函数详细分析
  6. ubuntu安装完无法用xshell,远程链接
  7. 构建自己的NSZombie
  8. unique path 阶梯
  9. floquet端口x极化入射波_hfss和cst电磁媒质色散曲线dispersiondiagram研究方法.pdf
  10. 东线报接口 全网一手线报全网(京东,淘宝,天猫)最全优惠信息
  11. 施耐德 m340 编程手册_施耐德电气自动化软件汇总
  12. 基于WinForm开发的Ribbon界面案例的扩展
  13. 【IP 笔记 2.】北邮 互联网协议 Internet Protocol - Transport Layer
  14. 如何获取淘宝/天猫商品历史价格信息的API接口
  15. C++ increment/decrement/dereference 操作符典型写法
  16. controllerAs
  17. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定 解决方法
  18. LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件
  19. [附源码]java毕业设计本科毕业设计过程管理系统
  20. A. 这是一道简单的水题~

热门文章

  1. 安卓学习日志 Day01 — 界面布局
  2. 对WEB标准以及W3C的理解与认识
  3. 全国泰州市专业技术人员计算机考试,泰州市专业技术人员实用教程试题及答案(92分)...
  4. C++ :线程的暂停、恢复和停止
  5. 小杜机器人线下店_泡泡玛特线下机器人商店突破1000台!
  6. PySpark之DataFrame的常用函数(创建、查询、修改、转换)
  7. 计算机术语输入的英文缩写,计算机术语英文缩写
  8. 基于最大似然估计(matlab实验)
  9. 12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)
  10. 二维burgers方程_用格子Boltzmann方法研究二维Burgers方程