QStackedWidget使用实例

制作一个页面X,该页面X中有两个按钮a,b;和两个页面A,B。要求点击按钮a时,显示页面A。点击按钮b时,显示页面B。
要求按钮位于页面A或B的上方,并且依次由左向右间隔排列。
要求将页面A分为两个子页面A1和A2,将页面B分为两个子页面B1和B2。

可以通过简单的父子关系来实现页面A中的子页面A1和A2,以及页面B中的子页面B1和B2。我们将页面A和页面B分别用垂直布局包含子页面A1、A2和B1、B2。这样,A1、A2和B1、B2会直接显示在页面A和页面B中,而无需额外的点击切换。

以下是完整代码。

目录结构

project/
├── main.cpp
├── MainWindow.h
└── MainWindow.cpp

代码实现

MainWindow.h - 主窗口头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QStackedWidget>
#include <QWidget>class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);private:QPushButton *buttonA;            // 按钮a,用于显示页面AQPushButton *buttonB;            // 按钮b,用于显示页面BQStackedWidget *stackedWidget;   // 页面堆叠控件,用于管理页面A和页面BQWidget *pageA;                  // 页面AQWidget *pageB;                  // 页面BQWidget *subPageA1;              // 页面A的子页面A1QWidget *subPageA2;              // 页面A的子页面A2QWidget *subPageB1;              // 页面B的子页面B1QWidget *subPageB2;              // 页面B的子页面B2
};#endif // MAINWINDOW_H
MainWindow.cpp - 主窗口实现文件
#include "MainWindow.h"
#include <QVBoxLayout>
#include <QHBoxLayout>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {// 创建中央控件,用于承载所有的子控件QWidget *centralWidget = new QWidget(this);setCentralWidget(centralWidget);// 创建按钮 "a" 和 "b"buttonA = new QPushButton("Show Page A", this);buttonB = new QPushButton("Show Page B", this);// 创建页面A和页面BpageA = new QWidget(this);pageB = new QWidget(this);// 创建页面A的子页面A1和A2subPageA1 = new QWidget(pageA);subPageA2 = new QWidget(pageA);subPageA1->setStyleSheet("background-color: lightcyan;");subPageA2->setStyleSheet("background-color: lightcoral;");// 将子页面A1和A2添加到页面A的布局中QVBoxLayout *pageALayout = new QVBoxLayout(pageA);pageALayout->addWidget(subPageA1);pageALayout->addWidget(subPageA2);// 创建页面B的子页面B1和B2subPageB1 = new QWidget(pageB);subPageB2 = new QWidget(pageB);subPageB1->setStyleSheet("background-color: lightyellow;");subPageB2->setStyleSheet("background-color: lightpink;");// 将子页面B1和B2添加到页面B的布局中QVBoxLayout *pageBLayout = new QVBoxLayout(pageB);pageBLayout->addWidget(subPageB1);pageBLayout->addWidget(subPageB2);// 使用QStackedWidget来存放页面A和页面BstackedWidget = new QStackedWidget(this);stackedWidget->addWidget(pageA); // index 0stackedWidget->addWidget(pageB); // index 1// 创建一个水平布局用于放置按钮QHBoxLayout *buttonLayout = new QHBoxLayout();buttonLayout->addWidget(buttonA);buttonLayout->addWidget(buttonB);// 创建一个垂直布局用于整体布局QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);mainLayout->addLayout(buttonLayout);   // 将按钮布局添加到主布局的顶部mainLayout->addWidget(stackedWidget);  // 将页面堆叠控件添加到主布局的底部// 连接按钮和页面切换的槽函数connect(buttonA, &QPushButton::clicked, this, [=]() {stackedWidget->setCurrentIndex(0); // 显示页面A});connect(buttonB, &QPushButton::clicked, this, [=]() {stackedWidget->setCurrentIndex(1); // 显示页面B});
}
main.cpp - 主程序入口
#include <QApplication>
#include "MainWindow.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow mainWindow;mainWindow.setWindowTitle("Page Switcher with Subpages"); // 设置主窗口标题mainWindow.resize(400, 300);                              // 设置主窗口大小mainWindow.show();                                        // 显示主窗口return app.exec(); // 启动应用程序事件循环
}

代码说明

  • 子页面A1、A2和B1、B2:直接作为页面A和页面B的子控件,通过垂直布局加入各自的页面。
  • 布局与页面结构
    • QVBoxLayout *pageALayout:用于页面A的垂直布局,将subPageA1subPageA2加入。
    • QVBoxLayout *pageBLayout:用于页面B的垂直布局,将subPageB1subPageB2加入。

运行效果

  • 程序启动后显示主窗口,顶部有两个按钮“Show Page A”和“Show Page B”。
  • 点击“Show Page A”时显示页面A,包括两个子页面A1和A2,背景色分别为淡青色和淡珊瑚色。
  • 点击“Show Page B”时显示页面B,包括两个子页面B1和B2,背景色分别为淡黄色和淡粉色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …

不要只知道deepl翻译,这里有10个专业好用的翻译工具等着你。

deepl翻译的优点还是有很多的&#xff0c;比如翻译的准确性很高&#xff0c;支持翻译的语言有很多&#xff0c;并且支持翻译文件和文本。但是现在翻译工具那么多&#xff0c;大家需要翻译的场景也有很多&#xff0c;怎么能只拥有一个翻译工具呢。所以在这里我帮助大家寻找了一波…

使用Docker Compose构建多容器应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Docker Compose构建多容器应用 引言 Docker Compose 简介 安装 Docker Compose 创建基本配置 运行多容器应用 查看服务状态 …

WindowsDocker安装到D盘,C盘太占用空间了。

Windows安装 Docker Desktop的时候,默认位置是安装在C盘,使用Docker下载的镜像文件也是保存在C盘,如果对Docker使用评率比较高的小伙伴,可能C盘空间,会被耗尽,有没有一种办法可以将Docker安装到其它磁盘,同时Docker的数据文件也保存在其他磁盘呢? 答案是有的,我们可以…

[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引

目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…

【小白学机器学习31】 大数定律,中心极限定理,标准正态分布与概率的使用

目录 1 正态分布相关的2个相关定理 1.1 大数定律&#xff1a;(证明了)分布的稳定性 1.2 中心极限定理&#xff1a;(证明了)分布的收敛性 2 使用标准差和概率的2种思路 2.1 标准正态分布的曲线 2.2 两种使用方式 2.3 第1种&#xff1a;按整数倍标准差δ 作为标准使用 2.…

springcloud通过MDC实现分布式链路追踪

在DDD领域驱动设计中&#xff0c;我们使用SpringCloud来去实现&#xff0c;但排查错误的时候&#xff0c;通常会想到Skywalking&#xff0c;但是引入一个新的服务&#xff0c;增加了系统消耗和管理学习成本&#xff0c;对于大型项目比较适合&#xff0c;但是小的项目显得太过臃…

R语言结构方程模型(SEM)

原文链接&#xff1a;R语言结构方程模型&#xff08;SEM&#xff09;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247624956&idx4&sn295580a016a86cfee8ee2277c93e32d5&chksmfa8da91bcdfa200da897f1f267492039865bdfe5d75a1c6e6df92ff5005e0eb5cc33a…

国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案

一、方案背景 在当代建筑施工领域&#xff0c;安全监管和防盗监控是保障工程顺利进行和资产安全的关键措施。随着科技进步&#xff0c;传统的监控系统已不足以应对现代工地的安全挑战。因此&#xff0c;基于国标GB28181视频平台EasyCVR的工地防盗视频监控系统应运而生&#xf…

labview学习总结

labview学习总结 安装labview的特点一、图形化编程范式二、并行执行机制三、硬件集成能力四、应用领域优势五、开发效率六、系统集成能力**labview基本组成示意图****常用程序结构图解**结语 基础知识介绍界面前后面板的概念平铺式和层叠式 帧的概念结构类型顺序结构for循环whi…

《YOLO 目标检测》—— YOLO v4 详细介绍

文章目录 一、整体网络结构1. YOLO v4 网络结构图2.对之前版本改进创新的概括 二、对改进创新部分的具体介绍1. 输入端创新2. Backbone主干网络创新CSPDarknet53Mish激活函数Dropblock正则化 3. 特征融合创新SPP模块PAN结构 4. Prediction输出层创新CIOU LossDIoU_NMS&#xff…

动态规划 —— dp问题-按摩师

1. 按摩师 题目链接&#xff1a; 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/the-masseuse-lcci/description/ 2. 算法原理 状态表示&#xff1a;以某一个位置为结尾或者以某一个位置为起点 dp[i]表示&#xff1a;选择到i位置…

【react】基础知识点学习

1. 创建项目 npm install -g create-react-app npx create-react-app my-app cd my-app npm startindex.js为入口文件&#xff0c;App.js为根组件。 如何将react应用挂载在页面上&#xff1f; 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…

word及Excel常见功能使用

最近一直在整理需规文档及表格&#xff0c;Word及Excel需要熟练使用。 Word文档 清除复制过来的样式 当复制文字时&#xff0c;一般会带着字体样式&#xff0c;此时可选中该文字 并使用 ctrlshiftN 快捷键进行清除。 批注 插入->批注&#xff0c;选中文本 点击“批注”…

在Microsoft Outlook日历中添加多个时区

在Microsoft Outlook日历中添加多个时区 1.单击Outlook中的文件选项卡&#xff0c;单击选项 2.左侧菜单中选择日历 3.向下滚动到时区部分&#xff0c;并标记当前时区&#xff0c;比如China 4.选中“显示第二个时区”框 5.选择第二个时区并给它一个标签&#xff0c;比如Germa…

vue组件在项目中的常用业务逻辑(3)

获取完后台接口数据后&#xff0c;需将数据在页面中进行动态展示。 一、在getters中简化数据&#xff1a; 二、在search>index.vue中写计算属性&#xff0c;实现将接口的goodsList模块数据展示在vue的search上&#xff1a; 三、1.用v-for循环数据&#xff0c;一共十个&…

从传感器到清洁力提升,灵途科技推动家电智能化发展

双十一第一波预售刚结束&#xff0c;第二波预售活动又火热开启。得益于政府补贴和平台优惠的双重带动&#xff0c;扫地机等高端智能家电需求暴增。 今年&#xff0c;各大电商平台不再单纯追求“全网最低价”&#xff0c;而是在低价基础上注重提升用户的综合体验。家电机器人品…

基于STM32的智能温室环境监测与控制系统设计(代码示例)

一、项目概述 在现代农业中&#xff0c;智能大棚能够通过环境监测、数据分析和自动控制等技术手段&#xff0c;实现对作物生长环境的精细化管理。本项目旨在设计一个基于STM32单片机的智能大棚系统&#xff0c;能够实时监测光照强度、空气温湿度及土壤湿度&#xff0c;并根据设…

详解CRC校验原理以及FPGA实现

文章目录 一、什么是CRC校验&#xff1f;二、实现CRC校验原理以及步骤2.1 用多项式表示二元码数据2.2 选择一个生成多项式作为校验2.3 计算CRC校验码 三、CRC判断数据是否错误的原理以及步骤3.1 将收到的数据与生成多项式求余3.2 数据发生错误再进行CRC校验判断 四、FPGA实现CR…

大模型学习笔记------CLIP模型解读与思考

大模型学习笔记------CLIP模型解读与思考 1、为什么提出CLIP模型2、CLIP模型详解3、CLIP模型的重要意义 上文已经讲到&#xff0c;我认为多模态的大模型是最有前途的大模型&#xff0c;首先学习的就是CLIP这个模型。 CLIP&#xff08;Contrastive Language-Image Pretraining&…