Container QML 类型

提供常见容器功能的基础抽象类型。 更多...

导入声明import QtQuick.Controls
继承

Control

继承自

DialogButtonBoxMenuBarSplitViewSwipeViewTabBar

属性

方法

详细介绍

Container 是一种允许动态插入和删除项的类似容器的用户界面控件的基础类型。

使用 Container

通常,项目被静态声明为容器的子项,但也可能动态地添加插入移动删除项目。可以使用itemAt()或contentChildren来访问容器中的项。

大多数容器都有一个“当前”项目的概念。可以通过currentIndex属性指定当前项,并可以通过只读的currentItem属性访问。

以下示例说明了将项目动态插入到TabBar的过程,它是容器的具体实现之一。

Row {
    TabBar {
        id: tabBar

        currentIndex: 0
        width: parent.width - addButton.width

        TabButton { text: "TabButton" }
    }

    Component {
        id: tabButton
        TabButton { text: "TabButton" }
    }

    Button {
        id: addButton
        text: "+"
        flat: true
        onClicked: {
            tabBar.addItem(tabButton.createObject(tabBar))
            console.log("added:", tabBar.itemAt(tabBar.count - 1))
        }
    }
}

当前索引的管理

当使用多个容器,如TabBarSwipeView时,可以将它们的currentIndex属性相互绑定,以保持同步。当用户与任一容器交互时,其当前索引的变化将自动传播到另一个容器。

注意,然而,在JavaScript中分配currentIndex值将移除相应的绑定。为了保留绑定,请使用以下方法更改当前索引:

TabBar {
    id: tabBar
    currentIndex: swipeView.currentIndex
}

SwipeView {
    id: swipeView
    currentIndex: tabBar.currentIndex
}

Button {
    text: qsTr("Home")
    onClicked: swipeView.setCurrentIndex(0)
    enabled: swipeView.currentIndex != 0
}

Button {
    text: qsTr("Previous")
    onClicked: swipeView.decrementCurrentIndex()
    enabled: swipeView.currentIndex > 0
}

Button {
    text: qsTr("Next")
    onClicked: swipeView.incrementCurrentIndex()
    enabled: swipeView.currentIndex < swipeView.count - 1
}

实现容器

容器不提供任何默认的视觉呈现。它用于实现如SwipeViewTabBar这样的容器。在实现自定义容器时,API中最重要的部分是contentModel,它以一种方式提供包含的项,可以将其用作项视图和重复器的对象模型。

Container {
    id: container

    contentItem: ListView {
        model: container.contentModel
        snapMode: ListView.SnapOneItem
        orientation: ListView.Horizontal
    }

    Text {
        text: "Page 1"
        width: container.width
        height: container.height
    }

    Text {
        text: "Page 2"
        width: container.width
        height: container.height
    }
}

注意页面的项的大小是如何手动设置的。这是因为示例使用了一个普通的容器,它不假定任何视觉布局。通常不需要在如SwipeViewTabBar这样的具体容器实现中指定项的大小。

也请参见容器控件

属性文档

contentChildren : list<Item>

该属性包含内容子项列表。

该列表包含所有在QML中声明为容器子项的项目,以及使用addItem()和insertItem()方法动态添加或插入的项目。

注意:contentData不同,contentChildren不包括非视觉的QML对象。当插入或移动项时,它将重新排序。

也请参见Item::childrencontentData


contentData : list<QtObject> [默认]

该属性包含内容数据列表。

该列表包含在QML中声明的容器子项的所有对象,以及分别使用addItem()和insertItem()方法动态添加或插入的项目。

注意:contentChildren不同,contentData包括非视觉QML对象。在插入或移动项目时,它不会重新排序。

另请参阅:Item::datacontentChildren


contentHeight : real [since QtQuick.Controls 2.5 (Qt 5.12)]

该属性保存内容高度,用于计算容器的总隐式高度。

除非显式覆盖,否则内容高度将自动根据容器中项目的隐式高度计算。

该属性自QtQuick.Controls 2.5(Qt 5.12)引入。

另请参阅:contentWidth


contentModel : model [只读]

该属性保存项的内容模型。

内容模型用于可视化目的。它可以将作为模型分配给展示容器内容的项。

Container {
    id: container
    contentItem: ListView {
        model: container.contentModel
    }
}

另请参阅:contentDatacontentChildren


contentWidth : real [since QtQuick.Controls 2.5 (Qt 5.12)]

该属性保存内容宽度,用于计算容器的总隐式宽度。

除非显式覆盖,否则内容宽度将自动根据容器中项目的隐式宽度计算。

该属性自QtQuick.Controls 2.5(Qt 5.12)引入。

另请参阅:contentHeight


count : int [只读]

该属性保存项目数量。


currentIndex : int

该属性保存当前项的索引。

另请参阅:currentItem管理当前索引


currentItem : Item [只读]

该属性保存当前项。

另请参阅:currentIndex


方法文档

void addItem(Item item)

添加一个item


[since QtQuick.Controls 2.1 (Qt 5.8)] void decrementCurrentIndex()

递减容器的当前索引。

可以通过调用此方法修改当前索引,而不会断开现有的currentIndex绑定。

该方法自QtQuick.Controls 2.1(Qt 5.8)引入。

另请参阅:currentIndex管理当前索引


[since QtQuick.Controls 2.1 (Qt 5.8)] void incrementCurrentIndex()

递增容器的当前索引。

可以通过调用此方法修改当前索引,而不会断开现有的currentIndex绑定。

该方法自QtQuick.Controls 2.1(Qt 5.8)引入。

另请参阅:currentIndex管理当前索引


void insertItem(int index, Item item)

index 插入一个 item


Item itemAt(int index)

返回 index 处的 item,如果不存在则返回 null


void moveItem(int from, int to)

将一个 item 从一个索引 from 移动到另一个索引 to


[since QtQuick.Controls 2.3 (Qt 5.10)] void removeItem(Item item)

移除并销毁指定的 item

此方法自 QtQuick.Controls 2.3 (Qt 5.10) 引入。


void setCurrentIndex(int index)

设置容器的当前 index

可以通过调用此方法来设置特定的当前索引,而不用担心破坏现有的 currentIndex 绑定。

另请参阅:currentIndex管理当前索引


[since QtQuick.Controls 2.3 (Qt 5.10)] Item takeItem(int index)

移除并返回 index 处的 item。

注意: item 的所有权转移给调用者。

此方法自 QtQuick.Controls 2.3 (Qt 5.10) 引入。


© 2024 The Qt Company Ltd. 本文档中的文档贡献包括各自的版权所有者的版权。本提供的文档是按照 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款许可的。Qt 和相应的标志是芬兰和/或世界各地的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。