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

QT中QStackedWidget控件功能及应用

一.概述

1.介绍

QStackedWidget 是 Qt 中一个非常重要的容器控件,它允许你在同一区域显示多个页面(子部件),但每次只显示其中一个页面。

StackedWidget 是 Qt 中实现多页面应用的强大工具,特别适合需要复杂页面切换逻辑的场景。

2.核心特性

二.代码示例

1.基本功能

    QVBoxLayout *mainLayout = new QVBoxLayout(this);

    // 创建 Stacked Widget

    QStackedWidget *stackedWidget = new QStackedWidget(this);

    stackedWidget->setGeometry(50, 150, 100, 100);  //控件绝对位置,长、宽

    // 创建多个页面并添加到 Stacked Widget

    // 页面1:欢迎页面

    QWidget *page1 = new QWidget(this);

    QVBoxLayout *layout1 = new QVBoxLayout(page1);

    layout1->addWidget(new QLabel("欢迎使用我的应用!"));

    QPushButton *toPage2Btn = new QPushButton("前往设置");

    layout1->addWidget(toPage2Btn);

    stackedWidget->addWidget(page1); // 索引0

    // 页面2:设置页面

    QWidget *page2 = new QWidget(this);

    page2->setStyleSheet("background-color: green;" );// 背景色

    QVBoxLayout *layout2 = new QVBoxLayout(page2);

    layout2->addWidget(new QLabel("应用设置"));

    QPushButton *toPage1Btn = new QPushButton(this);

    toPage1Btn->setText("返回首页");

    layout2->addWidget(toPage1Btn);

    stackedWidget->addWidget(page2); // 索引1

    // 页面3:关于页面

    QWidget *page3 = new QWidget(this);

    page3->setStyleSheet("background-color: red;" );// 背景色

    QVBoxLayout *layout3 = new QVBoxLayout(page3);

    layout3->addWidget(new QLabel("关于我们"));

    QPushButton *toPage1Btn2 = new QPushButton(this);

    toPage1Btn2->setText("返回首页1");

    layout3->addWidget(toPage1Btn2);

    stackedWidget->addWidget(page3); // 索引2

    // 添加控制按钮

    QHBoxLayout *controlLayout = new QHBoxLayout(this);

    QPushButton *prevBtn = new QPushButton(this);

    prevBtn->setGeometry(250, 150, 80, 50);  //控件绝对位置,长、宽

    prevBtn->setText("上一页");

    QPushButton *nextBtn = new QPushButton(this);

    nextBtn->setGeometry(350, 150, 80, 50);  //控件绝对位置,长、宽

    nextBtn->setText("下一页");

    controlLayout->addWidget(prevBtn);

    controlLayout->addWidget(nextBtn);

    // 组装界面

    mainLayout->addWidget(stackedWidget);

    mainLayout->addLayout(controlLayout);

    // 连接信号槽

    QObject::connect(toPage2Btn, &QPushButton::clicked, [stackedWidget]() {

        stackedWidget->setCurrentIndex(1); // 切换到设置页面

    });

    QObject::connect(toPage1Btn, &QPushButton::clicked, [stackedWidget]() {

        stackedWidget->setCurrentIndex(0); // 切换回首页

    });

    QObject::connect(toPage1Btn2, &QPushButton::clicked, [stackedWidget]() {

        stackedWidget->setCurrentIndex(0); // 切换回首页

    });

    QObject::connect(prevBtn, &QPushButton::clicked, [stackedWidget]() {

        int current = stackedWidget->currentIndex();

        int count = stackedWidget->count();

        stackedWidget->setCurrentIndex((current - 1 + count) % count);

    });

    QObject::connect(nextBtn, &QPushButton::clicked, [stackedWidget]() {

        int current = stackedWidget->currentIndex();

        int count = stackedWidget->count();

        stackedWidget->setCurrentIndex((current + 1) % count);

    });

2.常用方法详解

(1)页面管理方法

// 添加页面

int index1 = stackedWidget->addWidget(pageWidget); // 返回页面索引

// 插入页面

int index2 = stackedWidget->insertWidget(1, anotherWidget); // 在指定位置插入

// 移除页面(不删除部件)

stackedWidget->removeWidget(pageWidget);

// 获取页面数量

int pageCount = stackedWidget->count();

// 获取指定索引的页面

QWidget *widget = stackedWidget->widget(2);

// 获取页面索引

int index = stackedWidget->indexOf(pageWidget);

(2)页面切换方法

// 通过索引切换

stackedWidget->setCurrentIndex(2);

// 通过部件指针切换

stackedWidget->setCurrentWidget(pageWidget);

// 获取当前页面索引

int currentIndex = stackedWidget->currentIndex();

// 获取当前页面部件

QWidget *currentWidget = stackedWidget->currentWidget();

三.与 QTabWidget 的对比

http://www.dtcms.com/a/409938.html

相关文章:

  • 网络爬虫(上)
  • 论文精读(六):微服务系统服务依赖发现技术综述
  • 农业推广网站建设企业商城网站建设价格
  • 教师做班级网站手机网站打开微信号
  • 司法审计师:在数字与法律之间行走的“侦探”
  • google drive 怎么断点续传下载?
  • 基于STM32单片机的温湿度臭氧二氧化碳检测OneNET物联网云平台设计
  • LeetCode 面试经典 150_哈希表_快乐数(45_202_C++_简单)(哈希表;快慢指针)
  • K8S部署的ELK分片问题解决,报错:unexpected error while indexing monitoring document
  • Atlas Mapper 教程系列 (7/10):单元测试与集成测试
  • 众智FlagOS 1.5发布:统一开源大模型系统软件栈,更全面、AI赋能更高效
  • 理解 mvcc
  • 【网络编程】TCP 粘包处理:手动序列化反序列化与报头封装的完整方案
  • 数据库MVCC
  • 如何用AI工具开发一个轻量化CRM系统(七):AI生成pytest测试脚本
  • qData:一站式开源数据中台
  • 国外中文网站排行在线图片编辑网站源码
  • [数据结构]优先级队列
  • ARM内部寄存器
  • Laravel + UniApp AES加密/解密
  • 5G开户时切片配置参数详解
  • 面向新质生产力,职业院校“人工智能”课程教学解决方案
  • wap网站如何做福建外贸网站
  • ElasticSearch-提高篇
  • 第6篇、Flask 表单处理与用户认证完全指南:从零到实战
  • Visual Studio 2013 Update 4 中文版安装步骤(带TFS支持)附安装包​
  • 珠海 网站建设注册安全工程师题库
  • 上手 cpp-httplib:轻量级 C++ HTTP 库的安装与实战指南
  • 突破文档型数据库迁移困境:金仓多模方案破解电子证照系统国产化难题
  • 网站手机客户端开发wordpress制造商单页