本页内容

QStackedWidget Class

QStackedWidget 类提供了一个小部件堆栈,该堆栈中每次仅显示一个小部件。更多内容...

标题: #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 类的便捷布局控件。

与QStackedLayout 类似,QStackedWidget可以被实例化,并填充多个子控件(“页面”):

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 本身不提供用户切换页面的内置机制。这通常是通过一个QComboBox 或QListWidget 来实现的,该控件用于存储 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() 函数返回该列表中小部件的索引。 小部件既可以通过addWidget() 函数添加到列表末尾,也可以通过insertWidget() 函数插入到指定索引位置。removeWidget() 函数用于从小部件堆栈中移除一个小部件。可以通过count() 函数获取小部件堆栈中包含的小部件数量。

widget() 函数返回指定索引位置的小部件。屏幕上显示的小部件的索引由currentIndex() 提供,并可通过setCurrentIndex() 进行更改。同样地,当前显示的小部件可通过currentWidget() 函数获取,并使用setCurrentWidget() 函数进行更改。

每当堆叠控件中的当前控件发生变化,或者有控件从堆叠控件中被移除时,会分别发出currentChanged() 和widgetRemoved() 信号。

另请参阅 QStackedLayout 和QTabWidget 。

属性文档

[read-only] count : int

该属性存储此堆叠控件所包含的小控件数量

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

访问函数:

int count() const

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

currentIndex : int

该属性保存了当前可见的小部件的索引位置

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

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

访问函数:

int currentIndex() const
void setCurrentIndex(int index)

通知器信号:

void currentChanged(int index)

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

成员函数文档

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

根据给定的parent 创建一个QStackedWidget。

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

[virtual noexcept] QStackedWidget::~QStackedWidget()

销毁此堆叠控件,并释放所有已分配的资源。

int QStackedWidget::addWidget(QWidget *widget)

将给定的widget 追加到QStackedWidget 中,并返回其索引位置。widget 的所有权将转移给QStackedWidget 。

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

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

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

每当当前小部件发生变化时,都会发出此信号。

该参数包含新当前小部件的index ,若无新小部件(例如,当QStackedWidget 中没有小部件时),则返回-1。

注意: 这是属性currentIndex 的Notifier 信号。

另请参阅 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)

将给定的widget 插入到QStackedWidget 中给定的index 位置。widget 的所有权将转移给QStackedWidget 。如果index 超出范围,则会追加widget (此时返回的是widget 的实际索引)。

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

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

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

void QStackedWidget::removeWidget(QWidget *widget)

将widget 从QStackedWidget 中移除。也就是说,widget 并未被删除,只是从堆叠布局中移除,导致其被隐藏。

注意: widget 的父 对象和父控件仍为QStackedWidget 。如果应用程序希望重用已移除的widget ,则建议将其重新设置为该对象的子元素。

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

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

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

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

QWidget *QStackedWidget::widget(int index) const

返回位于指定坐标index 处的小部件,如果不存在该小部件,则返回nullptr 。

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

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

每当添加或插入一个小部件时,都会触发此信号。小部件的index 会作为参数传递。

该函数于 Qt 6.9 版本中引入。

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

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

每当移除一个控件时,都会触发此信号。控件的index 将作为参数传递。

另请参阅 removeWidget()。

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