当前位置: 首页 > article >正文

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

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

一、概述

二、使用场景

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);


http://www.kler.cn/a/531039.html

相关文章:

  • 【C++】B2120 单词的长度
  • 【C++语言】卡码网语言基础课系列----5. A+B问题VIII
  • vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题
  • 大模型综合性能考题汇总
  • C++模板编程——可变参函数模板
  • 100.2 AI量化面试题:在构建多因子选股模型时,如何有效处理因子之间的共线性问题?请给出具体的解决方案
  • 运维自动化工具集:构建高效运维体系的密钥
  • 浏览器模块化难题
  • 解决vscode扩展插件开发webview中的请求跨域问题
  • 【前端】ES6模块化
  • 大模型综合性能考题汇总
  • 【PyQt】keyPressEvent键盘按压事件无响应
  • 单行函数与聚合函数
  • Windows 安装Linux子系统
  • Autosar CP RTE规范解读之RTE与VFB以及RTE API关系解析
  • 【机器学习篇】K-Means 算法详解:从理论到实践的全面解析
  • 高阶开发基础——快速入门C++并发编程3
  • 掌握 HTML5 多媒体标签:如何在所有浏览器中顺利嵌入视频与音频
  • va_list va_start va_end的概念和使用案例
  • python:如何播放 .spx 声音文件
  • Mac电脑上最新的好用邮件软件比较
  • Docker环境下Nacos的保姆级安装教程
  • UE PlayerState
  • 【FreeRTOS 教程 八】直达任务通知
  • YOLOV11-1:YoloV11-安装和CLI方式训练模型
  • 使用Express.js和SQLite3构建简单TODO应用的后端API