1.Row布局

  • Row中的item可以不需要使用anchors布局,就能通过行的形式进行布局。
  • 并且item可以使用Positioner附加属性来访问有关其在Row中的位置及其他信息.

示例如下所示,通过Positioner获取每个元素位置标签:

Window {
width: 320;
height: 240;
visible: true;
Row {
anchors.centerIn: parent
spacing: 4
Repeater {
model: 4
Rectangle {
id: rect
width: 30; height: 30
border.width: 1
Text {
text: rect.Positioner.index
}
color: {
if (Positioner.isFirstItem) {
return "red"
} else if (Positioner.isLastItem) {
return "yellow"
} else {
return "lightsteelblue"
}
}
}
}
}
}

效果如下所示:

Repeater对象介绍

Repeater对象是个重复组件对象,上面示例中的"model: 4"表示内部的顶层item需要加载的个数.

而model其实是个var类型属性,如果我们设置为int类型,那么表示需要加载的个数,并且还提供一个index只读属性给我们使用.

如果设置为字符串数组,那么就提供一个modelData只读属性给我们使用.如下图所示:

2.Column布局

  • 和Row类似,不过是以列的方式进行排列item,并且每个item都有个Positioner附加属性.

将上面示例中的Row改为Column,如下图所示:

3.Grid布局

  • 以网格的方式进行排列item.每个item默认都会放于每个单元格的左上角.
  • 并且每个item都有个Positioner附加属性.
  • Grid默认为4列,然后根据item成员个数动态计算行数,我们也可以通过rows和columns属性来设置行列数.

示例如下所示:

Window {
visible: true
width: 320;
height: 240; Grid {
anchors.centerIn: parent
spacing: 4
Repeater {
id: repeat
model: 10
Rectangle {
id: rect
border.width: 1
Text {
text: rect.Positioner.index
}
color: {
console.log((Positioner.index + 1) * 10)
if (Positioner.isFirstItem) {
return "red"
} else if (Positioner.isLastItem) {
return "yellow"
} else {
return "lightsteelblue"
}
}
width: (repeat.model - Positioner.index + 1) * 5
height: (repeat.model - Positioner.index + 1) * 5
}
}
}
}

效果如下所示:

可以看到columns默认为4,并且每个Item绘制的位置都默认从网格的左上角开始绘制.不过我们可以通过horizontalItemAlignment和verticalItemAlignment属性来设置每个网格的对齐方式.

而Grid的flow属性则是用来设置布局流方向,取值有:

  • Grid.LeftToRight(默认,从每一行左往右布局)
  • Grid.TopToBottom(从每一列上往下布局,直到放满一列才会放下一列)

4.Flow布局

  • Flow布局和Grid布局有点类似,但是Flow没有行列属性, 他会根据自身宽高来动态计算item的行列.
  • 它的默认布局方向(flow属性)为Flow.LeftToRight,也就是从左往右排列,如果剩余的宽度不足,则从下一行继续左往右排列.
  • 除此之外,还可以改为Flow.TopToBottom,从上往下排列,如果一列排完,则排下一列.

示例如下所示:

Window {
visible: true Flow {
width: parent.width
height: parent.height
spacing: 4
Repeater {
id: repeat
model: 12
Rectangle {
id: rect
border.width: 1
Text {
text: rect.Positioner.index
}
color: {
console.log((Positioner.index + 1) * 10)
if (Positioner.isFirstItem) {
return "red"
} else if (Positioner.isLastItem) {
return "yellow"
} else {
return "lightsteelblue"
}
}
width: (repeat.model - Positioner.index + 1) * 5
height: (repeat.model - Positioner.index + 1) * 5
}
}
}

效果如下所示:

如上图所示,可以看到当排"格子3"的时候,由于第一排剩余宽度不足,所以排在了第二行了.

当我们改变窗口大小,Flow就会立即进行重排.

5.布局嵌套

  • 布局与布局可以进行嵌套,比如Row和Column嵌套就可以实现一个Grid布局.

示例如下所示:

Window {
visible: true Column {
anchors.centerIn: parent
Rectangle { width: 200; height: 10; color: "red" } Repeater {
model: 3
Row {
Repeater {
model: 10
Rectangle { width: 20; height: 20; radius: 10; color: "green" }
}
}
}
Rectangle { width: 200; height: 10; color: "blue" }
} }

效果如下所示:

下章学习:13.Quick QML-RowLayout、ColumnLayout、GridLayout布局管理器介绍、并通过GridLayout设计的简易网站导航界面

12.Quick QML-QML 布局(Row、Column、Grid、Flow和嵌套布局) 、Repeater对象的更多相关文章

  1. qt quick中qml编程语言

    Qt QML 入门 — 使用C++定义QML类型 发表于 2013 年 3 月 11 日   注册C++类 注册可实例化的类型 注册不实例化的QML类型 附带属性 注册C++类 注册可实例化的类型 如 ...

  2. Qt Quick 与 QML语言(初学笔记1)

    Qt Quick Qt Quick是一些新的UI技术的集合,用来帮助开发者创建一种现在越来越多用于手机.多媒体播放器.机顶盒以及其他便携式设备上的直观的.现代的.流畅的用户界面.简单来说,Qt Qui ...

  3. 【Qt】Qt Quick 之 QML 与 C++ 混合编程详解

    Qt Quick 之 QML 与 C++ 混合编程详解 - CSDN博客   专栏:Qt Quick简明教程 - CSDN博客   .

  4. Qt Quick 和qml介绍

    很多人不了解Qt Quick和Qml,还有很多人对其存在偏见.这篇文章就是来向这些有困惑的人介绍一下其是什么,有什么特点. 首先,这两个是一个东西吗? 答案:是的.但是,具体来说,Qt Quick是框 ...

  5. flutter 页面布局 Paddiing Row Column Expanded 组件

    Flutter Paddiing 组件 在 html 中常见的布局标签都有 padding 属性,但是 Flutter 中很多 Widget 是没有 padding 属 性.这个时候我们可以用 Pad ...

  6. 10Flutter页面布局 Padding Row Column Expanded组件详解:

    Padding组件: main.dart import 'package:flutter/material.dart'; import 'res/listData.dart'; /* flutter页 ...

  7. 页面布局 Paddiing Row Column Expanded 组件详解

    一.Paddiing 组件     padding    EdgeInsetss 设置填充的值     child  组件    return Padding(     padding: EdgeIn ...

  8. Flutter 布局类组件:线性布局(Row和Column)

    前言 所谓线性布局,即指沿水平或垂直方向排布子组件.Flutter中通过Row和Column来实现线性布局,并且它们都继承自弹性布局(Flex). 接口描述 Row({ Key key, // 表示子 ...

  9. BootStrap入门教程 (一) :手脚架Scaffolding(全局样式(Global Style),格网系统(Grid System),流式格网(Fluid grid System),自定义(Customing),布局(Layouts))

    2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK ...

随机推荐

  1. HDFS中的NameNode名节点——FSimage

    HDFS缓冲区 Fsimage 文件映射,Edits文件操作记录. 与ES的缓冲区不同,ES是维护数据的变更,而HDFS缓冲区是用于名结点维护文件系统元数据(目录树)的机制. 在HDFS集群中,Nam ...

  2. kvm-PLE代码分析

    Linux源码版本: 5.3.0 相关数据结构 #define KVM_DEFAULT_PLE_GAP 128 // ple_gap #define KVM_VMX_DEFAULT_PLE_WINDO ...

  3. docker里运行docker命令

    一.概述 现有环境的jenkins是在docker里面运行的,需要执行docker相关命令才行. 关于基于docker搭建jenkins,请参考链接: https://www.cnblogs.com/ ...

  4. DNS Rebinding漏洞原理

    目录 SSRF过滤器设计 背景知识 DNS TTL 公网DNS服务器 DNS重绑定 自建DNS服务器 利用步骤图解 实战中的注意事项 防御 参考 DNS Rebinding 广泛用于绕过同源策略.SS ...

  5. mysql索引设计的注意事项(大量示例,收藏再看)

    mysql索引设计的注意事项(大量示例,收藏再看) 目录 一.索引的重要性 二.执行计划上的重要关注点 (1).全表扫描,检索行数 (2).key,using index(覆盖索引) (3).通过ke ...

  6. 单细胞分析实录(9): 展示marker基因的4种图形(二)

    在上一篇中,我已经讲解了展示marker基因的前两种图形,分别是tsne/umap图.热图,感兴趣的读者可以回顾一下.这一节我们继续学习堆叠小提琴图和气泡图. 3. 堆叠小提琴图展示marker基因 ...

  7. golang——win10环境protobuf的使用

    1.protobuf配置 (1)https://github.com/protocolbuffers/protobuf/releases (2)选择适合的版本:protoc-3.8.0-win64.z ...

  8. P2055 [ZJOI2009]假期的宿舍 题解(二分图)

    题目链接 P2055 [ZJOI2009]假期的宿舍 解题思路 因为懒,提供一种不连边,直接根据题目给出的邻接矩阵进行匈牙利算法的思路. \(a[i][j]\)表示\(i\)能不能睡\(j\)的床,需 ...

  9. PTE准备的时候,用英式英语还是美式英语

    我自己是按照英式英语准备的,因为PTE的题目都是英式拼写,考生在做SWT题目的时候往往会抄原文中的句子或者关键词,不自觉地就将第一个区分点写成英式的,所以后面再用美式的就会被判错. PTE写作的小分中 ...

  10. 利用flex解决input定位的问题

    用简单的布局搞定input框使用fixed下输入的问题 最近在做移动端H5聊天应用发现,当input框在最底部并且使用 position:fixed 属性的时候在苹果手机中会出现不兼容的情况 ​