LayoutItemProxy QML 类型

LayoutItemProxy 类提供了一个在布局中存放 QQuickItem 的占位符。 更多...

导入语句import QtQuick.Layouts
QtQuick.Layouts 6.6
继承

Item

属性

详细描述

一些响应式布局需要不同屏幕尺寸的不同布局层次结构,但布局层次结构与 QML 结构相同,因此无法在运行时更改。 LayoutItemProxy 通过在布局中表示一个 target 项目来克服这一限制。 该 target 项目本身可以在 QML 层次结构的任何位置定义。 这允许声明具有相同内容项目的多个布局。 这些布局可以被显示和隐藏,以在它们之间切换。

注意: 此 API 被视为技术预览,并可能在 Qt 的未来版本中更改或删除。

如果 LayoutItemProxy 是 可见 的,它将尝试控制 target 项目。 控制将调整 target 项目的位置和大小以匹配 LayoutItemProxy 的位置和大小。 此外,LayoutItemProxy 将将自己设置为 target 的父节点(以确保事件传递和有用的绘图顺序),并将可见性设置为 true。 多个 LayoutItemProxy 可以指向同一项目,但一次只能控制一个项目。 因此,同一项目指向的代理中只有一个是可见的。 如果多个代理指向同一项目,但每个代理的 可见 都设置为 false,则该项目也将不可见。

Layout 所有的附加属性 target,以及 QQuickItem::implicitWidthQQuickItem::implicitHeighttarget 都由 LayoutItemProxy 传递。 LayoutItemProxy 将在 Layout 属性和大小方面尽可能模仿 targetLayout 的附加属性也可以明确设置在 LayoutItemProxy 上,这将停止 target 属性的传递。

示例用法

这是一个简约示例,通过代理在两个布局间切换,以使用相同的项。布局中的项可以在QML结构的任意点定义。

Rectangle {
    id: rectangle1
    color: "tomato"
    Layout.fillHeight: true
    Layout.fillWidth: true
}

Rectangle {
    id: rectangle2
    color: "lightskyblue"
    Layout.fillHeight: true
    Layout.fillWidth: true
}

然后我们可以使用LayoutItemProxys定义布局

GridLayout {
    id: l1
    columns: 1
    visible: false
    anchors.fill: parent
    LayoutItemProxy { target: rectangle1 }
    LayoutItemProxy { target: rectangle2 }
}

GridLayout {
    id: l2
    columns: 2
    visible: true
    anchors.fill: parent
    LayoutItemProxy { target: rectangle1 }
    LayoutItemProxy { target: rectangle2 }
}

现在我们可以根据我们选择的准则,通过切换布局的可见性来在布局之间切换。

onWidthChanged: {
    if (width < 300) {
        l2.visible = false
        l1.visible = true
    } else {
        l1.visible = false
        l2.visible = true
    }
}

生成的两个布局如下所示

LayoutItemProxy也可以在不使用布局的情况下使用,例如将其锚定到不同的项。真实和代理项的混合使用也是可能的,同样布局和项的嵌套结构也是可行的。

警告:LayoutItemProxy会将其目标项的父项设置为自身。在引用目标项的父项时,请注意这一点。

另请参阅:GridLayoutRowLayout,以及 ColumnLayout

属性文档

target : Item

此属性保存代理应在布局层次结构中表示的


© 2024 The Qt Company Ltd. 包含在此处的文档贡献是各自所有者的版权。此处提供的文档是在自由软件基金会的发布的GNU自由文档许可证版本1.3的条款下许可的。Qt和相应的标志是芬兰及/或全球其他国家的The Qt Company Ltd.的商标。所有其他商标都是其各自所有者的财产。