锚(anchors)布局,每一个项目都可以认为有一组无形的锚线

left,horizontalCenter,right,top,verticalCenter,baseline和bottom.

如上图:图中没有显示baseline,它是一条假想的线,文本坐落在这条线上。对于没有文本的项目它与top相同。

  1. 使用锚布局
    7条锚分别对应了Item项目中的anchors属性组的相关属性。因为Qt Quick中所有可视项目都继承自Item,所以所有可视项目都可以使用锚进行布局。Qt Quick的锚定系统允许不同项目的锚线之间建立关系。
import QtQuick 2.2Item {Rectangle {id: rect1width: 50; height: 50; color: "blue"}Rectangle {id: rect2width: 50; height: 50; color: "red"anchors.left: rect1.right}
}
  • 这里rect2的左边界锚定到了rect1的右边界。

  • 另外还可以指定多个锚。
Rectangle { id: rect1; .... }
Rectangle {id: rect2;anchors.left; rect1.right; anchors.rop; rect1.bottom; ...
}

通过指定多个水平或者垂直的锚可以控制一个项目的大小:
例如:rect2锚定到了rect1的右边和rect3的左边,当rect1或rect3移动时,rect2会进行必要的伸缩或收缩。

Rectangle { id: rect1; x: 0; ... }
Rectangle { id: rect2; anchors.left: rect1.right;   anchors.right: rect3.left; ... }
Rectangle { id: rect3; x: 150; ... }

Qt Quick 还提供了一系列方便使用的锚。例如,使用anchors.fill等价于设置left,right,top和bottom锚定到目标项目的left,right,top和bottom; anchors.centerIn等价于设置verticalCenter和horizontalCenter锚定到目标项目的verticalCenter 和 horizontalCenter等。

  1. 锚边距和位移
    锚定系统也允许为一个项目的锚指定边距(margin)和偏移量(offset)。 边距指定了项目锚到外边界的空间量,而偏移则允许使用中心锚线进行定位。一个项目可以通过leftMargin,rigtMargin,topMargin和bottomMargin独立指定锚边距。

如图所示:也可以使用anchor.margins来为所有的4个边指定相同的边距。锚偏移可以使用
horizontalCenterOffset,verticalCenterOffset 和 baselineOffset来指定。

  • 例如下面代码片段中,在rect2的左边留有5像素的边距。运行效果示意图:
import QtQuick 2.0Item {Rectangle { id: rect1; width: 50; height: 50; color: "blue" }Rectangle {id: rect2;width: 50; height: 50;color: "red"anchors.left: rect1.right;anchors.leftMargin: 5;}
}

  1. 运行时改变锚
    Qt Quick 提供了AnchorChanges类型,以便在运行时修改项目的锚,它需要在状态State中进行。AnchorChanges不能修改项目的边距,需要时可以使用PropertyChanges完成。
    例子:使用AnchorChanges改变了项目的top和bottom锚,使用PropertyChanges修改了top和bottom锚边距。
import QtQuick 2.2Rectangle {id: windowwidth: 120; height: 120color: "black"Rectangle { id: myRect; width: 50; height: 50; color: "red" }states: State {name: "reanchored"AnchorChanges {target: myRectanchors.top: window.topanchors.bottom: window.bottom}PropertyChanges {target: myRectanchors.topMargin: 10anchors.bottomMargin: 10}}MouseArea {anchors.fill: parent;onClicked: window.state = "reanchored"}
}

Qml基于锚(anchors)的布局相关推荐

  1. QML基础:锚anchors

    正文 除了传统的Grid.Row和Column外,Qt Quick还提供了一种使用锚点的方法来布局.可以将每个元素视为具有7条不可见的"锚定线"的集合:left.horizonta ...

  2. QML编程之旅 -- 元素布局

    文章目录 QML编程之旅 -- 元素布局 1.Positioner(定位器) 2.重复器 3.锚点 QML编程之旅 – 元素布局 概述: QML编程中可以用X,Y属性手动布局元素,但这些属性是与元素父 ...

  3. QML中的定位器和布局

    QML中的定位器和布局 QML中的定位器和布局 手动定位 锚点 定位器 布局类型 QML中的定位器和布局 手动定位 通过设置项目的x,y属性,可以将它们放置在屏幕上的特定x,y坐标处.根据视觉坐标系规 ...

  4. 基于锚框与无需锚框的通用物体检测算法

    物体检测通常是指在图像中检测出物体出现的位置及对应的类别,是计算机视觉的根本问题,也是最基础的问题.它广泛应用于日常生活中,如浏览器的拍照识图.自动驾驶行人车辆检测.道路目标检测(人行道检测)及图像分 ...

  5. 详解通用物体检测算法:基于锚框与无需锚框

    物体检测通常是指在图像中检测出物体出现的位置及对应的类别,它是计算机视觉中的根本问题之一,同时也是最基础的问题,如图像分割.物体追踪.关键点检测等都依赖物体检测. 从应用来看,物体检测已广泛应用于大家 ...

  6. 13款基于jQuery Mobile的布局插件和示例

    现在已经进入了移动互联网时代,因此将你的网站迁移到移动设备上就显得比较重要的.问题是,如何在移动设备的小屏幕中呈现你的网站中的所有内容呢? 本文介绍13款基于jQuery Mobile的布局插件和示例 ...

  7. 基于bootstrap的在线布局工具

    在这里推荐一款基于bootstrap的在线布局工具,以后布局可以就可以和做PPT一样了 http://www.bootcss.com/p/layoutit/ 转载于:https://www.cnblo ...

  8. sass 基于ruby_使用Sass和Gerillass创建漂亮的基于卡片的设计布局

    sass 基于ruby Creating a card-based design layout can often be challenging, especially if you don't us ...

  9. matlab代做mhslogic,MATLAB代做|FPGA代做|simulink代做——基于遗传算法的车间布局优化MATLAB源码...

    MATLAB代做|FPGA代做|simulink代做--基于遗传算法的车间布局优化MATLAB源码 添加时间:2019-12-8 来源:本站整理 基于遗传算法的车间布局优化MATLAB源码 车间布局优 ...

最新文章

  1. PHP的cookie与session的使用
  2. rbac 一个用户对应多个账号_电商后台系统:管理后台之账号管理(一)
  3. SSE命令示例代码(算术、逻辑、比较)
  4. CentOS系统代理配置
  5. 滑动窗口--单调队列
  6. 新一代纯前端控件集 WijmoJS 2018V2发布,提供 Web 设计器,可动态设计页面并生成代码...
  7. unity常见问题之20题
  8. socket 编程入门教程(五)UDP原理:4、“有连接”的UDP
  9. snmp+mrtg监控-note
  10. mysql每次update数据,自动更新对应表中时间字段
  11. oracle更新字段为null,OracleORA-01451:要修改为NULL的列无法修改为NULL
  12. php 类似百度分页,写了一个仿百度贴吧分页效果的分页类,有人要么?
  13. vc2013 调用大漠插件例子
  14. caxa发生文件读写异常_文件和异常
  15. 中国裁判文书网爬虫分析
  16. 应用程序无法正常启动0xc000007b解决方法
  17. Cloudera Manager 安装
  18. JAR包中的MANIFEST.MF文件详解以及编写规范
  19. 二层交换机VLAN基础配置
  20. MySQL隔离级别的底层理解(MVCC+锁)

热门文章

  1. 26岁,月入3万,癌症晚期:熬夜没什么,就是容易死!
  2. 有关笔记本安装内存事项
  3. 结构体中占位符的用法
  4. android之实现带图片和文本的Button
  5. Hive对接Hbase
  6. 主板电池掉电系统时间错误的解决方法
  7. ajaxSubmit如何取消上传文件
  8. 周末班补充视频Scala第2课:动手编写和运行自己的第一个Scala函数式编程的实例.
  9. L1-041 寻找250 (10 分)(三种常见的不断输入方法)
  10. python 中查找pi中的连续六位数字【求解】