- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
一、概述
二、使用场景
1. 多步表单
2. 选项卡界面
3. 状态机界面
三、常见样式
四、属性设置
1. 页面管理
2. 布局管理
3. 信号与槽
五、内容处理
1. 添加页面
2. 移除页面
3. 设置当前页面
4. 获取当前页面
5. 获取指定页面
6. 获取页面总数
7. 页面切换信号
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. 添加页面
QWidget *page1 = new QWidget();
QStackedWidget *stackedWidget = new QStackedWidget();
stackedWidget->addWidget(page1);
2. 移除页面
stackedWidget->removeWidget(page1);
3. 设置当前页面
stackedWidget->setCurrentWidget(page1);
// 或者通过索引设置
stackedWidget->setCurrentIndex(0);
4. 获取当前页面
QWidget *currentPage = stackedWidget->currentWidget();
int currentIndex = stackedWidget->currentIndex();
5. 获取指定页面
QWidget *page = stackedWidget->widget(0);
6. 获取页面总数
int pageCount = stackedWidget->count();
7. 页面切换信号
connect(stackedWidget, &QStackedWidget::currentChanged, this, &MyClass::onPageChanged);
8. 页面移除信号
connect(stackedWidget, &QStackedWidget::widgetRemoved, this, &MyClass::onPageRemoved);