QStackedLayout Class

QStackedLayout 类提供了一个部件堆栈,在该堆栈中,一次只能看到一个部件。更多

Header: #include <QStackedLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承: QLayout

公共类型

enum StackingMode { StackOne, StackAll }

属性

公共函数

QStackedLayout()
QStackedLayout(QLayout *parentLayout)
QStackedLayout(QWidget *parent)
virtual ~QStackedLayout()
int addWidget(QWidget *widget)
int currentIndex() const
QWidget *currentWidget() const
int insertWidget(int index, QWidget *widget)
void setStackingMode(QStackedLayout::StackingMode stackingMode)
QStackedLayout::StackingMode stackingMode() const
QWidget *widget(int index) const

重新实现的公共函数

virtual void addItem(QLayoutItem *item) override
virtual int count() const override
virtual bool hasHeightForWidth() const override
virtual int heightForWidth(int width) const override
virtual QLayoutItem *itemAt(int index) const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &rect) override
virtual QSize sizeHint() const override
virtual QLayoutItem *takeAt(int index) override

公共插槽

void setCurrentIndex(int index)
void setCurrentWidget(QWidget *widget)

信号

void currentChanged(int index)
(since 6.9) void widgetAdded(int index)
void widgetRemoved(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 来实现的,后者存储了 QStackedLayout 页面的标题。例如

    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() 函数返回给定索引位置上的部件。屏幕上显示的 widget 的索引由currentIndex() 函数给出,可以使用setCurrentIndex() 函数进行更改。同样,当前显示的 widget 可以使用currentWidget() 函数获取,也可以使用setCurrentWidget() 函数更改。

每当布局中的当前部件发生变化或从布局中移除部件时,就会分别发出currentChanged() 和widgetRemoved() 信号。

另请参阅 QStackedWidgetQTabWidget

成员类型文档

enum QStackedLayout::StackingMode

该枚举指定布局如何处理其子部件的可见性。

常量说明
QStackedLayout::StackOne0只有当前部件可见。这是默认值。
QStackedLayout::StackAll1所有部件都可见。当前窗口小部件只是被提出。

属性文档

[read-only] count : const int

此属性表示布局中包含的部件数量

访问功能:

virtual int count() const override

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

currentIndex : int

该属性保存可见部件的索引位置

如果没有当前 widget,则当前索引为-1。

访问功能:

int currentIndex() const
void setCurrentIndex(int index)

Notifier 信号:

void currentChanged(int index)

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

stackingMode : StackingMode

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

默认值为StackOne 。将该属性设置为StackAll 后,您就可以将布局用于在其他部件(如图形编辑器)顶部进行额外绘制的覆盖部件。

访问函数:

QStackedLayout::StackingMode stackingMode() const
void setStackingMode(QStackedLayout::StackingMode stackingMode)

成员函数文档

QStackedLayout::QStackedLayout()

构造一个没有父节点的 QStackedLayout。

该 QStackedLayout 必须稍后安装到 widget 上才能生效。

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

[explicit] QStackedLayout::QStackedLayout(QLayout *parentLayout)

构建新的 QStackedLayout 并将其插入给定的parentLayout 中。

[explicit] QStackedLayout::QStackedLayout(QWidget *parent)

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

该布局将安装在parent widget 上,并管理其子控件的几何形状。

[virtual noexcept] QStackedLayout::~QStackedLayout()

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

[override virtual] void QStackedLayout::addItem(QLayoutItem *item)

重实现:QLayout::addItem(QLayoutItem *item).

int QStackedLayout::addWidget(QWidget *widget)

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

如果在调用此函数前QStackedLayout 为空,则给定的widget 将成为当前 widget。

另请参阅 insertWidget()、removeWidget() 和setCurrentWidget()。

[signal] void QStackedLayout::currentChanged(int index)

每当布局中的当前部件发生变化时,就会发出该信号。index 指定了新的当前部件的索引,如果没有新的部件,则为-1(例如,如果QStackedLayout 中没有部件)。

注: 属性currentIndex 的通知信号。

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

QWidget *QStackedLayout::currentWidget() const

返回当前部件,如果该布局中没有部件,则返回nullptr

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

[override virtual] bool QStackedLayout::hasHeightForWidth() const

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

[override virtual] int QStackedLayout::heightForWidth(int width) const

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

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

将给定的widget 插入此QStackedLayout 中给定的index 处。如果index 不在范围内,该 widget 将被添加(在这种情况下,返回的是widget 的实际索引)。

如果在调用此函数前QStackedLayout 为空,则给定的widget 将成为当前 widget。

如果在小于或等于当前索引的位置插入新部件,则会递增当前索引,但保留当前部件。

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

[override virtual] QLayoutItem *QStackedLayout::itemAt(int index) const

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

[override virtual] QSize QStackedLayout::minimumSize() const

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

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

将当前 widget 设置为指定的widget 。新的当前 widget 必须已包含在此堆叠布局中。

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

[override virtual] void QStackedLayout::setGeometry(const QRect &rect)

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

[override virtual] QSize QStackedLayout::sizeHint() const

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

[override virtual] QLayoutItem *QStackedLayout::takeAt(int index)

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

QWidget *QStackedLayout::widget(int index) const

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

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

[signal, since 6.9] void QStackedLayout::widgetAdded(int index)

每当添加或插入一个部件时,就会发出该信号。widget 的index 将作为参数传递。

该函数在 Qt 6.9 中引入。

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

[signal] void QStackedLayout::widgetRemoved(int index)

每当一个部件从布局中移除时,就会发出这个信号。widget 的index 作为参数传递。

另请参见 removeWidget().

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