QStackedLayout 类

QStackedLayout 类提供了一种只显示一个部件的堆栈布局。 更多...

头文件 #include <QStackedLayout>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QLayout

公共类型

枚举StackingMode { StackOne, StackAll }

属性

公共函数

QStackedLayout()
QStackedLayout(QWidget *parent)
QStackedLayout(QLayout *parentLayout)
虚拟~QStackedLayout()
intaddWidget(QWidget *widget)
intcurrentIndex() const
QWidget *currentWidget() const
intinsertWidget(int index, QWidget *widget)
voidsetStackingMode(QStackedLayout::StackingMode stackingMode)
QStackedLayout::StackingModestackingMode() const
QWidget *widget(int index) const

重写公共函数

虚拟 voidaddItem(QLayoutItem *item) override
虚拟 intcount() const override
虚拟 boolhasHeightForWidth() const override
虚拟 intheightForWidth(int width) const override
虚拟 QLayoutItem *itemAt(int index) const override
虚拟 QSizeminimumSize() const override
虚拟 voidsetGeometry(const QRect &rect) override
虚拟 QSizesizeHint() const override
虚拟 QLayoutItem *takeAt(int index) override

公共槽

voidsetCurrentIndex(int index)
voidsetCurrentWidget(QWidget *widget)

信号

voidcurrentChanged(int index)
voidwidgetRemoved(int index)

详细描述

QStackedLayout 可以用来创建类似于 QTabWidget 提供的用户界面。还有一个基于 QStackedLayout 的便捷类 QStackedWidget

QStackedLayout 可以包含多个子控件(“页面”)。例如

    QWidget *firstPageWidget = new QWidget;
    QWidget *secondPageWidget = new QWidget;
    QWidget *thirdPageWidget = new QWidget;

    QStackedLayout *stackedLayout = new QStackedLayout;
    stackedLayout->addWidget(firstPageWidget);
    stackedLayout->addWidget(secondPageWidget);
    stackedLayout->addWidget(thirdPageWidget);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(stackedLayout);
    setLayout(mainLayout);

QStackedLayout 没有提供使用户切换页面的内置方法。这通常通过一个存储 QComboBoxQListWidget 的页标题的 QStackedLayoutQStackedLayout 来完成。例如

    QComboBox *pageComboBox = new QComboBox;
    pageComboBox->addItem(tr("Page 1"));
    pageComboBox->addItem(tr("Page 2"));
    pageComboBox->addItem(tr("Page 3"));
    connect(pageComboBox, &QComboBox::activated,
            stackedLayout, &QStackedLayout::setCurrentIndex);

在填充布局时,将控件添加到一个内部列表中。函数indexOf()返回该列表中控件的索引。控件可以使用 addWidget() 函数添加到列表的末尾,或使用 insertWidget() 函数插入到指定索引。使用 removeWidget() 函数从布局中移除给定索引的控件。主布局中包含控件的数量,可以使用 count() 函数获得。

widget() 函数返回给定索引位置上的控件。在屏幕上显示的控件的索引由 currentIndex() 给出,可以使用 setCurrentIndex() 来更改。类似地,可以使用 currentWidget() 函数检索当前显示的控件,并使用 setCurrentWidget() 函数来修改。

每当布局中的当前控件更改或从布局中移除控件时,分别发出 currentChanged() 和 widgetRemoved() 信号。

另请参阅QStackedWidgetQTabWidget

成员类型文档

枚举 QStackedLayout::StackingMode

此枚举指定布局如何处理子控件的可见性。

常量描述
QStackedLayout::StackOne0只有一个当前控件可见。这是默认值。
QStackedLayout::StackAll1所有控件都可见。当前控件仅被提升。

属性文档

[只读] count : const int

此属性包含布局中的控件数量

访问函数

虚拟 intcount() const override

另请参阅currentIndex() 和 widget()。

currentIndex : int

此属性包含可见控件的索引位置

如果没有当前控件,当前索引为 -1。

访问函数

intcurrentIndex() const
voidsetCurrentIndex(int index)

通知信号

voidcurrentChanged(int index)

另请参阅currentWidget() 和 indexOf()。

堆叠模式 : StackingMode

确定处理子部件可见性的方式。

默认值是 StackOne。将属性设置为 StackAll 可以让您利用布局来重叠小部件,比如图形编辑器。

访问函数

QStackedLayout::StackingModestackingMode() const
voidsetStackingMode(QStackedLayout::StackingMode stackingMode)

成员函数文档

QStackedLayout::QStackedLayout()

以无父项的方式构建一个 QStackedLayout。

此 QStackedLayout 必须稍后安装到小部件才能生效。

另请参阅addWidget() 和 insertWidget()。

[显式] QStackedLayout::QStackedLayout(QWidget *parent)

使用给定的 parent 构建一个新的 QStackedLayout。

此布局将安装自身到 parent 小部件并管理其子部件的几何形状。

[显式] QStackedLayout::QStackedLayout(QLayout *parentLayout)

构建一个新的 QStackedLayout,并将其插入给定的 parentLayout

[虚,noexcept] QStackedLayout::~QStackedLayout()

销毁此 QStackedLayout。注意,布局的小部件不会被销毁。

[重写虚] void QStackedLayout::addItem(QLayoutItem *item)

重写:QLayout::addItem(QLayoutItem *item).

int QStackedLayout::addWidget(QWidget *widget)

将给定的小部件 widget 添加到布局的末尾,并返回 widget 的索引位置。

如果在调用此函数之前,布局是空的,给定的小部件 widget 将成为当前小部件。

另请参阅insertWidgetremoveWidgetsetCurrentWidget

[信号] void QStackedLayout::currentChanged(int index)

每当布局中的当前小部件发生变化时,都会发出此信号。 index 指定了新当前小部件的索引,或者在不存在新小部件的情况下(例如,如果布局中没有小部件),则为 -1。

注意:属性 currentIndex 的通知器信号。

另请参阅currentWidget() 和 setCurrentWidget

QWidget *QStackedLayout::currentWidget() const

返回当前小部件,或者如果此布局中没有小部件,则返回 nullptr

另请参阅 currentIndex() 和 setCurrentWidget()。

[覆盖虚拟] bool QStackedLayout::hasHeightForWidth() const

重新实现: QLayoutItem::hasHeightForWidth() const

[覆盖虚拟] int QStackedLayout::heightForWidth(int width) const

重新实现:QLayoutItem::heightForWidth(int) const

int QStackedLayout::insertWidget(int index, QWidget *widget)

在给定 index 的位置插入指定的 widget。如果 index 超出范围,则将 widget 追加(在这种情况下,返回的其实是 widget 的实际索引)。

如果在调用此函数之前,布局是空的,给定的小部件 widget 将成为当前小部件。

在小于或等于当前索引的索引处插入新 widget 将会增加当前索引,但不会改变当前 widget。

另请参阅 addWidget(), removeWidget()和 setCurrentWidget()。

[覆盖虚拟] QLayoutItem *QStackedLayout::itemAt(int index) const

重新实现:QLayout::itemAt(int index) const

[覆盖虚拟] QSize QStackedLayout::minimumSize() const

重新实现:QLayout::minimumSize() const

[槽] void QStackedLayout::setCurrentWidget(QWidget *widget)

将当前 widget 设置为指定的 widget。新的当前 widget 必须已经包含在本 stacked 布局中。

另请参阅 setCurrentIndex()和 currentWidget()。

[覆盖虚拟] void QStackedLayout::setGeometry(const QRect &rect)

重新实现:QLayout::setGeometry(const QRect &r)。

[覆盖虚拟] QSize QStackedLayout::sizeHint() const

重新实现:QLayoutItem::sizeHint() const

[覆盖虚拟] QLayoutItem *QStackedLayout::takeAt(int index)

重新实现:QLayout::takeAt(int index)。

QWidget *QStackedLayout::widget(int index) const

返回给定 index 的 widget,如果没有给定位置的 widget,则返回 nullptr

另请参阅currentWidget() 和 indexOf()。

[信号] void QStackedLayout::widgetRemoved(int index)

每当从布局中移除小部件时,都会发出此信号。将小部件的 索引 作为参数传递。

另请参阅 removeWidget

© 2024 Qt公司。本文件中包含的文档贡献者是各自内容的版权所有者。本文件的文档根据自由软件基金会的发布,按照GNU自由文档许可证版本1.3的条款进行许可。Qt以及相关的商标配属于芬兰Qt公司及其在全世界的子公司和附属机构。所有其他商标属于各自的所有者。