QML 中宽度、高度与隐式宽度/高度的区别及其应用场景

2024-06-24 06:04

本文主要是介绍QML 中宽度、高度与隐式宽度/高度的区别及其应用场景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 QML 中,widthheightimplicitWidthimplicitHeight 这几个属性常常令开发者感到困惑。本文将详细介绍它们之间的区别,并说明在何种情况下应使用隐式尺寸以及普通尺寸。

基本定义

  • widthheight:表示组件/item 的实际尺寸。
  • implicitWidthimplicitHeight:表示组件/item 的自然尺寸,即在未明确指定尺寸时,组件自己希望占用的尺寸。

理解隐式尺寸和实际尺寸

隐式尺寸(Implicit Size)通常在创建可重用组件时使用。它表示组件在未设置明确尺寸时的自然大小。例如,一个图片的自然尺寸是其文件的实际像素大小,但这个尺寸可以被拉伸或缩小。

举例说明

假设我们有一个图片图库,其中的图片大小不一,我们希望这些图片在显示时可以缩小但不放大,此时可以使用隐式宽度和高度来存储图片的自然尺寸:

Image {width: Math.max(150, implicitWidth)height: Math.max(150, implicitHeight)
}

对于自定义组件,可以选择将尺寸定义为相对于组件的根节点,例如:

Item {id: rootRectangle {width: root.width * 0.2height: root.height * 0.2color: 'red'}Rectangle {x: 0.2 * root.widthy: 0.2 * root.heightwidth: root.width * 0.8height: root.height * 0.8color: 'green'}
}

在这种情况下,组件没有自然尺寸,任何设置的尺寸都能完美地适配。

相反,如果我们有一个具有自然尺寸的对象,例如某些固定尺寸的组件:

Item {id: rootproperty alias model: repeater.modelRepeater {id: repeaterdelegate: Rectangle {width: 100height: 100x: 102 * indexy: 102 * index}}
}

在这种情况下,应向用户提供关于自然尺寸的信息,用户可以决定是否设置一个更小的尺寸并处理溢出,例如通过裁剪内容。

隐式尺寸的实际应用

在许多情况下,childrenRect.heightchildrenRect.width 是隐式尺寸的良好度量标准,但也有例外。例如,当内容的 x 坐标为负值时,使用 childrenRect 可能并不合适。

一个实际例子是 Flickable,它专门用于包含比自身尺寸更大的对象。使 Flickable 的尺寸等于其内容的尺寸是不自然的。

注意,在自定义组件中使用 scale 时要小心,因为 childrenRect 不会意识到缩放。

Item {id: rootimplicitWidth: child.width * child.scaleimplicitHeight: child.height * child.scaleRectangle {id: childwidth: 100height: 100scale: 3color: 'red'}
}

实践准则

  1. 当需要设置可重用组件的根节点的尺寸时,使用 implicitWidthimplicitHeight
  2. 在某些情况下,如果节点作为属性暴露出来,也可以为非根节点设置隐式尺寸。
  3. 使用组件时,设置 widthheight

隐式尺寸不是必需的,但它们的存在是为了方便,并成为一种约定。

结论

理解和正确使用 widthheightimplicitWidthimplicitHeight 对于 QML 开发者来说非常重要。隐式尺寸主要在描述组件的自然尺寸时使用,而实际尺寸在组件的布局和显示中更为常见。通过正确使用这些属性,可以创建更灵活和可重用的组件。

这篇关于QML 中宽度、高度与隐式宽度/高度的区别及其应用场景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089364

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess