QML UI布局管理


概述

使用Qt做过UI的一定对QHBoxLayout, QVBoxLayout, 和QGridLayout这三个最重要也最常使用的layout managers非常熟悉。那么在QML中又是如何控制和管理UI布局的呢?那么我们这篇文章就为大家介绍这些基础知识。

首先,QML同样允许大家使用硬编码的方式将位置数值直接写到代码中,但是这样做首先难以适应UI的调整,其次代码维护起来也很困难。因此我们不推荐这样做。推荐大家使用的是以下三种布局管理器:Row,、Column、Grid,以及使用Anchor进行布局。

Row

QML 中的 Row 元素会将其子控件都排列在同一行,相互不重叠。我们还可以使用它的spacing属性来定义子控件之间的距离。比如下列代码就会产生如图所示的效果:

    
    
Row {
spacing:
2
Rectangle { color:
" red " ; width: 50 ; height: 50 }
Rectangle { color:
" green " ; width: 20 ; height: 50 }
Rectangle { color:
" blue " ; width: 50 ; height: 20 }
}

Column

QML 中的 Column元素会将其子控件都排列在同一行,相互不重叠。我们还可以使用它的spacing 属性来定义子控件之间的距离。比如下列代码就会产生如图所示的效果:

 

?
1
2
3
4
5
6
Column {
         spacing: 2
         Rectangle { color: "red" ; width: 50; height: 50 }
         Rectangle { color: "green" ; width: 20; height: 50 }
         Rectangle { color: "blue" ; width: 50; height: 20 }
}

 

Grid

QML 中的 Grid元素会将其子控件都均匀地排列在一个网格内,相互不重叠,每一个子控件都被放置在一个网格单元的(0,0)位置,也就是左上角。Grid的rows 和columns属性定义网格的行数和列数,列数默认是4。我们还可以使用Grid的spacing 属性来定义网格单元之间的距离,这里注意水平和垂直方向的spacing都是一样的。比如下列代码就会产生如图所示的效果:

 

?
1
2
3
4
5
6
7
8
9
Grid {
         columns: 3
         spacing: 2
         Rectangle { color: "red" ; width: 50; height: 50 }
         Rectangle { color: "green" ; width: 20; height: 50 }
         Rectangle { color: "blue" ; width: 50; height: 20 }
         Rectangle { color: "cyan" ; width: 50; height: 50 }
         Rectangle { color: "magenta" ; width: 10; height: 10 }
}

 

混合应用

我们还可以将Grid、Row 和 Column 进行混合应用。比如下面的代码会产生如图所示的效果:

 

?
1
2
3
4
5
6
7
8
9
10
11
Column {
         spacing: 2
            Rectangle { color: "red" ; width: 50; height: 50 }
            Row {
                    spacing: 2
          Rectangle { color: "yellow" ; width: 50; height: 50 }
          Rectangle { color: "black" ; width: 20; height: 50 }
          Rectangle { color: "blue" ; width:50; height: 20 }
    }
    Rectangle { color: "green" ; width: 20; height: 50 }
}

 

Anchor

每一个item 都可以被认为具有 7 条隐藏的“anchor lines":left、 horizontalCenter、 right、 top、 verticalCenter、baseline、以及bottom,如下图所示:

其中baseline是指的文本所在的线,在上图中并未标出,如果item没有文字的话baselinw就和top的位置是相同的。除此之外,Anchor系统还提供了margins 和offsets。margins 是指一个item和外界之间所留有的空间,而offsets 则可以通过使用 center anchor lines来进行布局。如下图所示:

使用 QML anchoring系统,我们可以定义不同items之间的anchor lines之间的关系。例如:

 

?
1
2
Rectangle { id: rect1; ... }
Rectangle { id: rect2; anchors.left: rect1.right; anchors.leftMargin: 5; ... }

 

我们还可以使用多个anchors:

 

?
1
2
Rectangle { id: rect1; ... }
Rectangle { id: rect2; anchors.left: rect1.right; anchors.top: rect1.bottom; ... }

 

通过定义多个水平或垂直的anchors,我们还可以控制item的大小,例如:

 

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

 

注意:出于效率方面的考虑,我们只允许对一个item的邻居和之接父亲使用anchor定义。比如下面的定义是不合法的:

 

?
1
2
3
4
5
6
7
Item {
      id: group1
      Rectangle { id: rect1; ... }
  }
  Item {
      id: group2
      Rectangle { id: rect2; anchors.left: rect1.right; ... } <br> }
QML是一种基于JavaScript语法的用户界面描述语言,它使用了一种类似CSS的布局方式来管理UI元素的位置和大小。这种布局方式称为QML布局管理,它使得UI设计师可以更加方便地创建和管理UI布局。 以下是QML布局管理使用说明: 1. 容器元素 在QML布局管理中,容器元素是最基本的元素之一。它们用于包含其他UI元素,从而创建整个UI界面。常见的容器元素包括Rectangle、Item、ColumnLayout、RowLayout等。 2. 布局属性 QML布局管理提供了一些布局属性,用于控制UI元素的位置和大小。常见的布局属性包括x、y、width、height、anchors等。 其中,x和y属性用于控制UI元素的位置,width和height属性用于控制UI元素的大小,anchors属性用于将UI元素锚定到其他UI元素上。 3. 布局方式 QML布局管理提供了多种布局方式,包括水平布局、垂直布局、网格布局等。这些布局方式可以通过使用不同的容器元素和布局属性来实现。 例如,使用ColumnLayout容器元素和Layout.alignment属性可以创建垂直布局,使用RowLayout容器元素和Layout.alignment属性可以创建水平布局,使用GridLayout容器元素可以创建网格布局。 4. 响应式设计 QML布局管理支持响应式设计,可以根据不同的设备和屏幕尺寸来自动调整UI元素的位置和大小。这可以通过使用Layout.preferredWidth和Layout.preferredHeight属性来实现。 例如,为了使UI元素在不同的屏幕尺寸下都能够自适应,可以设置Layout.preferredWidth和Layout.preferredHeight属性为相对值,如:Layout.preferredWidth: parent.width * 0.5。 总之,QML布局管理是一种非常方便和灵活的UI布局方式,可以帮助UI设计师更加高效地创建和管理UI界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值