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. 为什么Linux需要虚拟内存

    本文转载自为什么 Linux 需要虚拟内存 导语 操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 ...

  2. Differences between Stack and Heap

    本文转载自Differences between Stack and Heap Stack vs Heap So far we have seen how to declare basic type ...

  3. Hive-常见调优方式 && 两个面试sql

    Hive作为大数据领域常用的数据仓库组件,在设计和开发阶段需要注意效率.影响Hive效率的不仅仅是数据量过大:数据倾斜.数据冗余.job或I/O过多.MapReduce分配不合理等因素都对Hive的效 ...

  4. python进阶(4)文件操作

    文件操作 文件操作主要包括对文件内容的读写操作,这些操作是通过文件对象实现的,通过文件对象可以读写文本文件和二进制文件 open(file, mode='r', buffering=-1, encod ...

  5. java实现压缩文件

    原文链接:https://www.cnblogs.com/zeng1994/p/7862288.html

  6. 【Notes_3】现代图形学入门——基础变换、MVP变换模型

    基础变换(二维) 三维变化与二维变换矩阵类似 齐次坐标下的基础变换 Scale: \[S(s_x,s_y) =\begin{pmatrix} s_x &0 &0\\ 0 & s ...

  7. 微信小程序:自定义组件

    为什么要学习自定义组件? 1.用上我自己的单词abc,我希望在页面中展示椭圆形的图片, 2.打开手机淘宝,假如现在要做一个企业级项目,里面有很多页面,首页存在导航模块,点击天猫,进入第二个页面,而第二 ...

  8. Java基本概念:异常

    一.简介 描述: 异常(Exception)指不期而至的各种状况,异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据. 要打开的文件不存在. 网络通信时连接中断,或者JVM内存溢出. 异常 ...

  9. Java流程控制:顺序结构

    一.流程控制 Java中的流程控制语句可以这样分类:顺序结构.选择结构.循环结构.这三种结构就足够解决所有的问题了! 二.顺序结构 描述: Java流程控制的基本结构就是顺序结构,除非特别指明,否则J ...

  10. Java数据类型拓展

    public class Demo03 { public static void main(String[] args) { //整数拓展: 二进制0b 十进制 八进制0 十六进制0x int i = ...