Windows图形界面(GUI)-QT-C/C++ - QT Stacked Widget

目录

一、概述

二、使用场景

[1. 多步表单](#1. 多步表单)

[2. 选项卡界面](#2. 选项卡界面)

[3. 状态机界面](#3. 状态机界面)

三、常见样式

四、属性设置

[1. 页面管理](#1. 页面管理)

[2. 布局管理](#2. 布局管理)

[3. 信号与槽](#3. 信号与槽)

五、内容处理

[1. 添加页面](#1. 添加页面)

[2. 移除页面](#2. 移除页面)

[3. 设置当前页面](#3. 设置当前页面)

[4. 获取当前页面](#4. 获取当前页面)

[5. 获取指定页面](#5. 获取指定页面)

[6. 获取页面总数](#6. 获取页面总数)

[7. 页面切换信号](#7. 页面切换信号)

[8. 页面移除信号](#8. 页面移除信号)


一、概述

QStackedWidget 是 Qt 框架中的一个重要组件,它允许开发者在同一个窗口区域内堆叠多个子窗口(页面),但一次只显示其中一个。这种设计非常适合需要动态切换界面的场景,如多步表单、选项卡界面、状态机界面等。

二、使用场景

1. 多步表单

在多步表单中,用户需要依次填写多个表单页面。QStackedWidget 可以很好地管理这些表单页面,通过按钮或程序逻辑控制页面的切换,确保用户按照预定的步骤完成表单填写。

2. 选项卡界面

虽然 Qt 提供了 QTabWidget 来实现选项卡界面,但在某些情况下,开发者可能希望自定义选项卡的外观或行为。QStackedWidget 可以通过按钮或其他控件来切换页面,从而实现自定义的选项卡界面。

3. 状态机界面

在状态机界面中,应用程序的不同状态对应不同的界面。QStackedWidget 可以根据应用程序的状态动态切换显示的页面,确保用户界面与应用程序状态保持一致。

三、常见样式

QStackedWidget 是一个堆叠的窗口小部件,它在同一个占位符中显示一个控件,多个控件堆叠在一起,但一次只能显示一个。通过程序或用户操作,可以切换当前显示的控件。

四、属性设置

1. 页面管理

  • 添加页面 :使用 addWidget(QWidget *widget) 方法向 QStackedWidget 中添加一个新的页面。

  • 删除页面 :使用 removeWidget(QWidget *widget) 方法从 QStackedWidget 中移除一个页面。

  • 重命名页面 :虽然 QStackedWidget 本身不提供直接重命名页面的方法,但可以通过自定义数据结构或标签来管理页面名称。

2. 布局管理

在每个页面上,开发者可以添加布局和控件,以构建复杂的用户界面。QStackedWidget 本身不限制页面的布局方式,开发者可以根据需要自由设计。

3. 信号与槽

  • 页面切换 :通过 setCurrentWidget(QWidget *widget)setCurrentIndex(int index) 方法切换页面时,可以连接 currentChanged(int index) 信号到自定义槽函数,以处理页面切换时的逻辑。

  • 页面移除 :当页面被移除时,widgetRemoved(int index) 信号会被发出,开发者可以连接此信号以处理页面移除后的逻辑。

五、内容处理

1. 添加页面

cpp 复制代码
QWidget *page1 = new QWidget();
QStackedWidget *stackedWidget = new QStackedWidget();
stackedWidget->addWidget(page1);

2. 移除页面

cpp 复制代码
stackedWidget->removeWidget(page1);

3. 设置当前页面

cpp 复制代码
stackedWidget->setCurrentWidget(page1);
// 或者通过索引设置
stackedWidget->setCurrentIndex(0);

4. 获取当前页面

cpp 复制代码
QWidget *currentPage = stackedWidget->currentWidget();
int currentIndex = stackedWidget->currentIndex();

5. 获取指定页面

cpp 复制代码
QWidget *page = stackedWidget->widget(0);

6. 获取页面总数

cpp 复制代码
int pageCount = stackedWidget->count();

7. 页面切换信号

cpp 复制代码
connect(stackedWidget, &QStackedWidget::currentChanged, this, &MyClass::onPageChanged);

8. 页面移除信号

cpp 复制代码
connect(stackedWidget, &QStackedWidget::widgetRemoved, this, &MyClass::onPageRemoved);
相关推荐
Better Rose几秒前
【2025“华中杯”大学生数学建模挑战赛】C题:就业状态分析与预测 详细解题思路
c语言·开发语言·数学建模
网络安全研发随想7 分钟前
C语言核心结构+难点精讲+工程技巧
c语言·开发语言·算法
别来无恙20213 分钟前
数据结构(6)
c语言·数据结构
superior tigre19 分钟前
C++学习:六个月从基础到就业——面向对象编程:虚函数与抽象类
开发语言·c++·学习
ademen26 分钟前
关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用
java·开发语言·kotlin
superior tigre1 小时前
C++学习:六个月从基础到就业——面向对象编程:重载运算符(下)
c++·学习
m0_zj1 小时前
41.[前端开发-JavaScript高级]Day06-原型关系图-ES6类的使用-ES6转ES5
开发语言·javascript·es6
海棠蚀omo1 小时前
C++笔记-list
开发语言·c++·笔记
烟雨柳成烟1 小时前
C++学习Day0:c++简介
开发语言·c++·qt·学习
XINVRY-FPGA2 小时前
XC6SLX100T-2FGG484I 赛灵思 XilinxFPGA Spartan-6
c++·人工智能·嵌入式硬件·阿里云·ai·fpga开发·fpga