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 的对比

相关推荐
li星野6 小时前
QT模拟题:QT项目实践与架构设计(120分钟)
开发语言·qt
大鹏说大话7 小时前
Java 锁膨胀机制深度解析:从偏向锁到重量级锁的进化之路
开发语言·c#
IT猿手7 小时前
基于 ZOH 离散化与增量 PID 的四旋翼无人机轨迹跟踪控制研究,MATLAB代码
开发语言·算法·matlab·无人机·动态路径规划·openclaw
IT猿手7 小时前
基于控制障碍函数(Control Barrier Function, CBF)的无人机编队三维动态避障路径规划,MATLAB代码
开发语言·matlab·无人机·动态路径规划·无人机编队
huaweichenai7 小时前
java的时间操作介绍
java·开发语言
就不掉头发7 小时前
C++右值与右值引用
开发语言·c++
IT猿手7 小时前
基于 CBF 的多无人机编队动态避障路径规划研究,无人机及障碍物数量可以自定义修改,MATLAB代码
开发语言·matlab·无人机·动态路径规划
炸膛坦客7 小时前
单片机/C/C++八股:(十六)C 中 malloc/free 和 C++ 中 new/delete 有什么区别?
c语言·开发语言·c++
@insist1237 小时前
软件设计师-组网技术基础:网络设备、传输介质与局域网核心协议
开发语言·网络·软考·软件设计师·软件水平考试
CSDN_Colinw7 小时前
C++中的工厂方法模式
开发语言·c++·算法