本页内容

Qt Quick 中的重要概念——定位

QML 中的视觉元素可以通过多种方式进行定位。与定位相关的最重要概念是“锚定”,这是一种相对定位方式,元素可以在特定边界处相互锚定(或连接)。其他定位概念包括绝对定位、通过坐标绑定进行定位、定位器和布局。

手动定位

元素可以手动定位。如果用户界面是静态的,手动定位是最高效的定位方式。

在任何用户界面中,视觉元素在任意时刻都位于屏幕坐标系中的特定位置。尽管流畅的动画和动态用户界面是Qt Quick 的主要关注点,但静态定位的用户界面仍然是一种可行的选择。 此外,如果这些元素的位置保持不变,与使用后续章节中记录的更动态的定位方法相比,手动指定位置通常能获得更高的性能。

在《Qt Quick 》中,每个视觉对象都位于由Qt Quick 视觉画布提供的坐标系内。正如该文档所述,视觉对象的 x 和 y 坐标是相对于其视觉父对象的,其左上角的坐标为 (0, 0)。

因此,以下示例将显示两个手动定位的矩形:

示例代码最终布局
import QtQuick 2.0

Item {
    width: 200
    height: 200

    Rectangle {
        x: 50
        y: 50
        width: 100
        height: 100
        color: "green"
     }

     Rectangle {
        x: 100
        y: 100
        width: 50
        height: 50
        color: "yellow"
     }
}

带手动定位功能的绿色和黄色矩形

使用绑定进行定位

还可以通过将绑定表达式赋值给与视觉画布中位置相关的属性来定位项目。这种定位方式最具动态性,但以此方式定位项目会带来一定的性能开销。

可视化对象的位置和尺寸也可以通过属性绑定来设置。其优点在于,当绑定的依赖关系发生变化时,相关值会自动更新。例如,一个矩形的宽度可能取决于其相邻矩形的宽度。

虽然绑定提供了一种非常灵活且直观的动态布局创建方式,但需要注意的是,它会带来一定的性能开销,因此在可能的情况下,应优先使用原始的锚点布局。

锚点

锚点允许将一个项目放置在另一个项目的旁边或内部,方法是将该项目的一个或多个锚点(边界)与另一个项目的锚点关联起来。即使其中一个项目的尺寸或位置发生变化,这些锚点仍然保持不变,从而支持高度动态的用户界面。

可以将视觉对象视为具有多个锚点(或更准确地说,锚线)。其他项目可以锚定到这些点上,这意味着当任何对象发生变化时,锚定在其上的其他对象将自动调整以保持锚定关系。

Qt Quick 将锚点作为顶级概念提供。有关该主题的深入信息,请参阅关于使用锚点进行定位的文档。

需要注意的是,如果布局保持“原始”状态,基于锚点的布局通常比基于绑定的布局性能要高得多。 “纯净”的锚点布局是指仅使用锚点(配合对象嵌套)来确定位置的布局,而“混杂”的锚点布局则同时使用锚点和绑定(无论是针对位置相关的 [x,y] 属性,还是针对尺寸相关的 [width,height] 属性)来确定位置。

定位器

Qt Quick 还提供了一些内置的定位器项。对于许多用例而言,最佳的定位器是简单的网格、行或列,而Qt Quick 提供了能够以最有效的方式将子项定位在这些布局中的项。有关使用预定义定位器的更多信息,请参阅关于项定位器类型的文档。

布局

从 Qt 5.1 开始,该模块 Qt Quick Layouts 还可用于在用户界面中排列Qt Quick 项。与定位器不同,Qt Quick Layouts 中的类型在声明式界面中同时管理项的位置和大小。它们非常适合可调整大小的用户界面。

从右到左(RTL)支持

语言书写方向通常会对用户界面中视觉元素的定位方式产生重大影响。Qt Quick 通过预定义布局以及从右到左的文本布局,支持元素的从右到左定位。

有关此主题的深入信息,请参阅 Qt Quick 中关于从右到左支持的文档。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.