QML使用anchors(锚)对元素进行布局。anchoring(锚定)是基础元素对象的基本属性,可以被所有的可视化QML元素使用。一个anchors(锚)就像一个协议,并且比几何变化更加强大。Anchors(锚)是相对关系的表达式,你通常需要与其它元素搭配使用。
anchors.png
一个元素有6条锚定线(top顶,bottom底,left左,right右,horizontalCenter水平中,verticalCenter垂直中)。在文本元素(Text Element)中有一条文本的锚定基线(baseline)。每一条锚定线都有一个偏移(offset)值,在top(顶),bottom(底),left(左),right(右)的锚定线中它们也被称作边距。对于horizontalCenter(水平中)与verticalCenter(垂直中)与baseline(文本基线)中被称作偏移值。

51Q}L(`DJ`W)0K5UR`_$FCG.png

1. 组件

  1. // Color.qml
  2. import QtQuick 2.15
  3. Rectangle {
  4. width: 100
  5. height: 100
  6. border.color: Qt.lighter(color)
  7. }

2. 布局

2.1 元素填充它的父元素

  1. // 元素填充它的父元素
  2. Color {
  3. color: "#ff0066"
  4. Color {
  5. width: 50
  6. anchors.fill: parent
  7. anchors.margins: 8
  8. color: "#ccff66"
  9. Text {
  10. anchors.centerIn: parent
  11. text: qsTr("(1)")
  12. }
  13. }
  14. }

2.2 元素左对齐它的父元素

  1. Color {
  2. color: "#ff0066"
  3. Color {
  4. width: 50; height: 50
  5. anchors.left: parent.left
  6. color: "#ccff66"
  7. Text {
  8. anchors.centerIn: parent
  9. text: qsTr("(2)")
  10. }
  11. }
  12. }

2.3 元素的左边与它父元素的右边对齐

  1. // 元素的左边与它父元素的右边对齐
  2. Color {
  3. color: "#ff0066"
  4. Color {
  5. width: 50; height: 50
  6. anchors.left: parent.right
  7. color: "#ccff66"
  8. Text {
  9. anchors.centerIn: parent
  10. text: qsTr("(3)")
  11. }
  12. }
  13. }

2.4 元素中间对齐。

Blue1与它的父元素水平中间对齐。Blue2与Blue1中间对齐,并且它的顶部对齐Blue1的底部。

  1. // 元素中间对齐
  2. Color {
  3. color: "#ff0066"
  4. Color {
  5. id: b11
  6. width: 30; height: 30
  7. y: 8
  8. color: "#ccff66"
  9. anchors.horizontalCenter: parent.horizontalCenter
  10. }
  11. Color {
  12. id: b12
  13. y:40
  14. width: 50; height: 30
  15. color: "#ccff66"
  16. anchors.topMargin: 4
  17. anchors.horizontalCenter: b11.horizontalCenter
  18. Text {
  19. anchors.centerIn: parent
  20. text: qsTr("(4)")
  21. }
  22. }
  23. }

2.5 元素在它的父元素中居中

  1. // 元素在它的父元素中居中
  2. Color {
  3. color: "#ff0066"
  4. Color {
  5. width: 50; height: 50
  6. anchors.centerIn: parent
  7. color: "#ccff66"
  8. Text {
  9. anchors.centerIn: parent
  10. text: qsTr("(5)")
  11. }
  12. }
  13. }

2.6 元素水平居中且设置偏移

元素水平方向居中对齐父元素并向后偏移12像素,垂直方向居中对齐。

  1. // 元素水平方向居中对齐父元素并向后偏移12像素,垂直方向居中对齐
  2. Color {
  3. color: "#ff0066"
  4. Color {
  5. width: 50; height: 50
  6. anchors.horizontalCenter: parent.horizontalCenter
  7. anchors.horizontalCenterOffset: -12
  8. anchors.verticalCenter: parent.verticalCenter
  9. color: "#ccff66"
  10. Text {
  11. anchors.centerIn: parent
  12. text: qsTr("(6)")
  13. }
  14. }
  15. }

3. 完整代码

transformation.qml

  1. import QtQuick 2.15
  2. import QtQuick.Window 2.15
  3. Rectangle {
  4. id: root
  5. width: 480
  6. height: 300
  7. Grid {
  8. x: 30;y:30
  9. spacing: 30
  10. columns: 3
  11. // 元素填充它的父元素
  12. Color {
  13. color: "#ff0066"
  14. Color {
  15. width: 50
  16. anchors.fill: parent
  17. anchors.margins: 8
  18. color: "#ccff66"
  19. Text {
  20. anchors.centerIn: parent
  21. text: qsTr("(1)")
  22. }
  23. }
  24. }
  25. // 元素左对齐它的父元素
  26. Color {
  27. color: "#ff0066"
  28. Color {
  29. width: 50; height: 50
  30. anchors.left: parent.left
  31. color: "#ccff66"
  32. Text {
  33. anchors.centerIn: parent
  34. text: qsTr("(2)")
  35. }
  36. }
  37. }
  38. // 元素的左边与它父元素的右边对齐
  39. Color {
  40. color: "#ff0066"
  41. Color {
  42. width: 50; height: 50
  43. anchors.left: parent.right
  44. color: "#ccff66"
  45. Text {
  46. anchors.centerIn: parent
  47. text: qsTr("(3)")
  48. }
  49. }
  50. }
  51. // 元素中间对齐
  52. Color {
  53. color: "#ff0066"
  54. Color {
  55. id: b11
  56. width: 30; height: 30
  57. y: 8
  58. color: "#ccff66"
  59. anchors.horizontalCenter: parent.horizontalCenter
  60. }
  61. Color {
  62. id: b12
  63. y:40
  64. width: 50; height: 30
  65. color: "#ccff66"
  66. anchors.topMargin: 4
  67. anchors.horizontalCenter: b11.horizontalCenter
  68. Text {
  69. anchors.centerIn: parent
  70. text: qsTr("(4)")
  71. }
  72. }
  73. }
  74. // 元素在它的父元素中居中
  75. Color {
  76. color: "#ff0066"
  77. Color {
  78. width: 50; height: 50
  79. anchors.centerIn: parent
  80. color: "#ccff66"
  81. Text {
  82. anchors.centerIn: parent
  83. text: qsTr("(5)")
  84. }
  85. }
  86. }
  87. // 元素水平方向居中对齐父元素并向后偏移12像素,垂直方向居中对齐
  88. Color {
  89. color: "#ff0066"
  90. Color {
  91. width: 50; height: 50
  92. anchors.horizontalCenter: parent.horizontalCenter
  93. anchors.horizontalCenterOffset: -12
  94. anchors.verticalCenter: parent.verticalCenter
  95. color: "#ccff66"
  96. Text {
  97. anchors.centerIn: parent
  98. text: qsTr("(6)")
  99. }
  100. }
  101. }
  102. }
  103. }