QML的布局
元素是以其父对象的左上角为基点,分别向左和向下进行延伸,可使用 x:
及 y:
进行位置的定义
Z:
是对堆叠顺序进行定义,数字越大越靠顶部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Window { width: 300 height: 300 visible: true title: qsTr("Hello World")
Rectangle { id: rect0 x: 50 y: 30 width:100 height: 100 border.width: 2
Rectangle{ id:rect1 x: 0 y: 0 z: 1 width: 40 height: 40 color: "red" } Rectangle{ id:rect2 x: 20 y: 20 z: 0 width: 40 height: 40 color: "green" } } }
|
动态表达式绑定
当B
对象属性调用了A
对象的属性,那么当A
的属性变化时,B
的属性会自动随之变化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Rectangle{ id:rect1 x: 0 y: 0 width: 40 height: 40 color: "red" } Rectangle{ id:rect2 x: rect1.x y: rect1.y+rect1.height width: 40 height: 40 color: "green" }
MouseArea{ anchors.fill: rect1 drag.target: rect1 }
|
当鼠标移动rect1
时,rect2
会自动跟随rect1
进行移动
锚点布局
可视组件必须有宽度
高度
x
y
的值
如不设定x
y
的值,默认为0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Rectangle{ id:rect1 width: 40 height: 70 color: "red" } Rectangle{ id:rect2 width: 60 height: 40 color: "green" anchors.verticalCenter: rect1.verticalCenter anchors.left: rect1.right anchors.leftMargin: 5 }
Item { anchors.fill: parent
Rectangle{ id: rect3 width: 30 height: 30 color: "blue" anchors.right: parent.right anchors.top: parent.top } }
|
使用锚点代替宽、高设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| Item { anchors.fill: parent
Rectangle{ id:rect1 width: parent.width/3 height: parent.height color: "red" } Rectangle{ id:rect2 width: parent.width/3 height: parent.height color: "green" anchors.left: rect1.right } Rectangle{ id: rect3 color: "blue" anchors.right: parent.right anchors.left: rect2.right anchors.top: parent.top anchors.bottom: parent.bottom
} }
|
行、列布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Item { anchors.fill: parent
ColumnLayout{ id: layout1
RadioButton{ checked: true text: '火锅' } RadioButton{ text: '水饺' } RadioButton{ text: '混沌' } } RowLayout{ id: layout2 anchors.left: layout1.right anchors.leftMargin: 30 RadioButton{ checked: true text: '火锅' } RadioButton{ text: '水饺' } RadioButton{ text: '混沌' } } }
|
FLOW流式布局
将元素按照顺序依次排列,默认从左向右,元素宽度超过FLOW宽度后,自动向下排列
可通过`flow: Flow.TopToBottom`改变为从上向下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| Item { anchors.fill: parent id:root
Flow { id:flow1 anchors.left: parent.left anchors.right: parent.right
Rectangle { id:rect1 width:root.width/2 height:100 color: 'red' } Rectangle { id:rect2 width:root.width/2 height:100 color: 'green' } Rectangle { id:rect3 width:root.width/2 height:100 color: 'blue' } } Flow { anchors.left: parent.left anchors.right: parent.right anchors.top: flow1.bottom flow: Flow.TopToBottom Rectangle { id:rect4 width:root.width/2 height:100 color: 'red' } Rectangle { id:rect5 width:root.width/2 height:100 color: 'green' } } }
|
网格布局
将元素按照网格方式排列,默认从左向右依次排列,超过设置列数
后自动向下排列
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Item { anchors.fill: parent id:root
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 } } }
|