Qt Quick 中的重要概念 - 定位

QML 中的可视项目可以多种方式定位。最重要的定位相关概念是锚定(anchoring),这是一种相对定位形式,项目可在特定边界相互锚定(或附加)。其他定位概念包括绝对定位、坐标绑定定位、定位器和布局。

手动定位

项目可以手动定位。如果用户界面是静态的,手动定位就是最有效的定位方式。

在任何用户界面中,视觉类型都是在屏幕坐标的某一特定位置存在的。虽然流畅的动画和动态用户界面是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 XML 5.1 开始,模块Qt Quick Layouts也可用于在用户界面中排列Qt Quick 项目。与定位器不同,Qt Quick Layouts 中的类型可在声明式界面中管理项目的位置和大小。它们非常适合可调整大小的用户界面。

支持从右向左

一种语言的书面形式的方向性往往对用户界面的可视化类型的定位方式有很大影响。Qt Quick 通过预定义布局和从右到左的文本布局支持从右到左的类型定位。

有关该主题的深入信息,请参阅 Qt Quick有关从右向左支持的文档。

© 2025 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.