QStackedLayout Class
QStackedLayout 类提供了一个小部件堆栈,该堆栈中每次仅显示一个小部件。更多内容...
| 标题: | #include <QStackedLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QLayout |
公共类型
| enum | StackingMode { StackOne, StackAll } |
属性
- count : int
- currentIndex : int
- stackingMode : StackingMode
公共函数
| 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 本身不提供用户切换页面的内置机制。这通常通过QComboBox 或QListWidget 来实现,它们会存储 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() 函数返回指定索引位置的小部件。屏幕上显示的小部件的索引由currentIndex() 提供,并可通过setCurrentIndex() 进行更改。同样地,当前显示的小部件可通过currentWidget() 函数获取,并通过setCurrentWidget() 函数进行修改。
每当布局中的当前小部件发生变化,或者小部件从布局中移除时,将分别发出currentChanged() 和widgetRemoved() 信号。
另请参阅 QStackedWidget 和QTabWidget 。
成员类型文档
enum QStackedLayout::StackingMode
此枚举指定了布局在处理其子控件的可见性时采用的方式。
| 常量 | 值 | 描述 |
|---|---|---|
QStackedLayout::StackOne | 0 | 仅当前小部件可见。这是默认值。 |
QStackedLayout::StackAll | 1 | 所有小部件均可见。当前小部件仅被置于最前。 |
属性文档
[read-only] count : int
该属性存储布局中包含的小部件数量
访问函数:
| virtual int | count() const override |
另请参阅 currentIndex() 和widget()。
currentIndex : int
该属性保存当前可见的小部件的索引位置
如果没有当前小部件,则当前索引为 -1。
访问函数:
| int | currentIndex() const |
| void | setCurrentIndex(int index) |
通知器信号:
| void | currentChanged(int index) |
另请参阅 currentWidget() 和indexOf()。
stackingMode : StackingMode
决定子控件可见性的处理方式。
默认值为StackOne 。将该属性设置为StackAll ,可让您利用该布局来处理在其他控件上方进行额外绘制的叠加控件,例如图形编辑器。
访问函数:
| QStackedLayout::StackingMode | stackingMode() const |
| void | setStackingMode(QStackedLayout::StackingMode stackingMode) |
成员函数文档
QStackedLayout::QStackedLayout()
创建一个没有父控件的 QStackedLayout。
该 QStackedLayout 必须在后续将其安装到某个小部件上才能生效。
另请参阅 addWidget() 和insertWidget()。
[explicit] QStackedLayout::QStackedLayout(QLayout *parentLayout)
创建一个新的 QStackedLayout,并将其插入到指定的parentLayout 中。
[explicit] QStackedLayout::QStackedLayout(QWidget *parent)
根据给定的parent ,构建一个新的QStackedLayout。
该布局将自身安装在parent 控件上,并管理其子控件的几何布局。
[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 将成为当前控件。
另请参阅 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 的实际索引)。
如果在调用此函数之前QStackedLayout 为空,则给定的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 。新的当前小部件必须已包含在此堆叠布局中。
另请参阅 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 处的小部件,如果该位置没有小部件,则返回nullptr 。
另请参阅 currentWidget() 和indexOf()。
[signal, since 6.9] void QStackedLayout::widgetAdded(int index)
每当添加或插入一个控件时,都会触发此信号。控件的index 将作为参数传递。
该函数自 Qt 6.9 起引入。
另请参阅 addWidget() 和insertWidget()。
[signal] void QStackedLayout::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.