QStackedWidget Class

QStackedWidget 类提供了一个窗口小部件堆栈,每次只有一个窗口小部件可见。更多

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

属性

公共功能

QStackedWidget(QWidget *parent = nullptr)
virtual ~QStackedWidget()
int addWidget(QWidget *widget)
int count() const
int currentIndex() const
QWidget *currentWidget() const
int indexOf(const QWidget *widget) const
int insertWidget(int index, QWidget *widget)
void removeWidget(QWidget *widget)
QWidget *widget(int index) const

公共插槽

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

信号

void currentChanged(int index)
(since 6.9) void widgetAdded(int index)
void widgetRemoved(int index)

重新实现的受保护函数

virtual bool event(QEvent *e) override

详细说明

QStackedWidget 可用于创建类似于QTabWidget 所提供的用户界面。它是一个建立在QStackedLayout 类之上的便捷布局 widget。

QStackedLayout 类似,QStackedWidget 也可由多个子 widget("页面")构建和填充:

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

    QStackedWidget *stackedWidget = new QStackedWidget;
    stackedWidget->addWidget(firstPageWidget);
    stackedWidget->addWidget(secondPageWidget);
    stackedWidget->addWidget(thirdPageWidget);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(stackedWidget);
    setLayout(layout);

QStackedWidget 没有为用户提供切换页面的内在方法。这通常是通过QComboBoxQListWidget 来实现的,后者存储了 QStackedWidget 页面的标题。例如

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

在填充堆叠部件时,部件会被添加到一个内部列表中。indexOf() 函数返回该列表中 widget 的索引。既可以使用addWidget() 函数将部件添加到列表末尾,也可以使用insertWidget() 函数在给定索引处插入部件。removeWidget() 函数可从堆叠部件中删除一个部件。堆叠 widget 中包含的 widget 数量可通过count() 函数获得。

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

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

另请参阅 QStackedLayoutQTabWidget

属性文档

[read-only] count : const int

此属性表示此堆叠 widget 包含的 widget 个数。

默认情况下,此属性的值为 0。

访问函数:

int count() const

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

currentIndex : int

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

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

默认情况下,该属性的值为-1,因为堆栈最初是空的。

访问函数:

int currentIndex() const
void setCurrentIndex(int index)

Notifier 信号:

void currentChanged(int index)

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

成员函数文档

[explicit] QStackedWidget::QStackedWidget(QWidget *parent = nullptr)

使用给定的parent 构建一个 QStackedWidget。

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

[virtual noexcept] QStackedWidget::~QStackedWidget()

销毁堆叠的 widget,并释放已分配的资源。

int QStackedWidget::addWidget(QWidget *widget)

将给定的widget 追加到QStackedWidget ,并返回索引位置。widget 的所有权将传递给QStackedWidget

如果在调用此函数前QStackedWidget 为空,则widget 将成为当前部件。

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

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

每当当前 widget 发生变化时,就会发出该信号。

参数为当前新 widget 的index ,如果没有新的 widget(例如,如果QStackedWidget 中没有 widget),则为-1。

注: 属性currentIndex 的通知信号。

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

QWidget *QStackedWidget::currentWidget() const

返回当前部件,如果没有子部件,则返回nullptr

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

[override virtual protected] bool QStackedWidget::event(QEvent *e)

重实现:QFrame::event(QEvent *e)。

int QStackedWidget::indexOf(const QWidget *widget) const

返回给定widget 的索引,如果给定的widget 不是QStackedWidget 的子节点,则返回-1。

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

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

QStackedWidget 中给定的index 处插入给定的widgetwidget 的所有权将传递给QStackedWidget 。如果index 不在范围内,则附加widget (在这种情况下,返回的是widget 的实际索引)。

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

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

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

void QStackedWidget::removeWidget(QWidget *widget)

widgetQStackedWidget 中移除。也就是说,widget 并未删除,只是从堆叠布局中移除,使其隐藏。

注: widget 的父对象和父部件仍为QStackedWidget 。如果应用程序希望重新使用已移除的widget ,则建议重新将其作为父对象。

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

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

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

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

QWidget *QStackedWidget::widget(int index) const

返回给定index 上的 widget,如果没有该 widget,则返回nullptr

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

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

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

该函数在 Qt 6.9 中引入。

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

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

每当移除一个 widget 时,就会发出该信号。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.