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. KSM概念学习

    KSM: Kernel SamePage Merging 内核同页合并 简介 KSM允许内核在两个或多个进程(包括虚拟客户机)之间共享完全相同的内存页. KSM让内核扫描检查正在运行中的程序,并比较他 ...

  2. 使用 xunit 编写测试代码

    使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...

  3. IDEA SVN 使用

    转: IDEA SVN 使用 一.上传项目到 SVN VCS -> Import into Version Control -> Share Project(Subversion) 点击 ...

  4. 最简单的,在win,linux中,用powershell,自动获取Let's Encrypt证书方法

    powershell传教士原创 2020-04-12 Let's Encrypt证书有效期3个月,支持泛域名[*.你的网站.net].支持n天内(一般10天内就够用了),用脚本自动续期. 简介: 这个 ...

  5. Get和Post请求方式

    Get和Post是两种不同的类型的请求. 它们主要有3点不同. 1.get请求通过浏览器地址栏传递表单数据.post请求通过form data 传递数据,不会通过地址栏. 2.get请求安全性较低,p ...

  6. 【转载】Java泛型详解

    [转载]http://www.importnew.com/24029.html 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考 ...

  7. golang调用shell命令(实时输出, 终止等)

    背景 是这样的,最近在研究一个定时任务系统的改造,可能有点像jenkins做到的那种吧. 可以输入shell命令,也可以执行py脚本等等,相比之前来说,也要能够及时停止! 但是遇到了这么个问题,gol ...

  8. 再探命令行传参之c与python

    继上一次java命令行传参 python sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:python解释 ...

  9. HDFS的上传流程以及windows-idea操作文件上传的注意

    HDFS的上传流程 命令:hdfs dfs -put xxx.wmv /hdfs的文件夹 cd进入到要上传文件的当前目录,再输入hdfs命令上传,注意-put后tab可以自动补全, 最后加上你要上传到 ...

  10. CentOS离线安装Nginx

    在医院搭建项目环境时,因为医院通常都是内网的,访问不了外网,所以很多服务都得通过离线的方式安装,下面讲讲CentOs系统中如何离线安装Nginx. 安装准备 Nginx离线安装依赖gcc.g++环境, ...