Qt应用开发(基础篇)——堆栈窗口 QStackedWidget

一、前言

QStackedWidget继承于QFrame,QFrame继承于QWidget,是Qt常用的堆栈窗口部件。

框架类QFrame介绍

QStackedWidget堆栈窗口,根据下标切换,一次显示一个小部件,常用于应用界面切换图片轮询播放等场景。

二、QStackedWidget类

1、count

该属性表示当前堆栈子部件的数量。

cpp 复制代码
int count() const    //获取选项卡数

2、currentIndex

该属性表示当前显示的子部件的下标,如果子部件数量为0,则返回-1。

cpp 复制代码
int currentIndex() const            //获取当前选项卡下标
void setCurrentIndex(int index)     //设置当前选项卡下标

3、公共方法

1)增加子部件

使用addWidget增加子部件,默认插入到尾部。

cpp 复制代码
int addWidget(QWidget *widget)

2)插入子部件

使用insertWidget在索引的位置插入子部件,如果索引index超出范围,那么插入到尾部,返回值为实际插入的位置。

cpp 复制代码
int insertWidget(int index, QWidget *widget)

3)移除子部件

使用removeWidget移除子部件,注意这里是从布局中移除,导致小部件被隐藏起来。

cpp 复制代码
void removeWidget(QWidget *widget)

4)查找子部件

使用indexOf找到某子部件索引,如果不存在则返回-1。

cpp 复制代码
int indexOf(QWidget *widget) const

5)设置/读取子部件

如果子部件不存在则返回空指针。

cpp 复制代码
QWidget *widget(int index) const
QWidget *currentWidget() const
void setCurrentWidget(QWidget *widget)

4、信号

当前索引发生变化触发currentChanged信号。

cpp 复制代码
void currentChanged(int index)

子部件被移除触发widgetRemoved信号。

cpp 复制代码
void widgetRemoved(int index)

5、实例

根据下拉框的选项修改stackWidget的显示子部件。

cpp 复制代码
QFont serifFont("Times", 20, QFont::Bold);
QWidget *firstPageWidget = new QWidget;
QLabel *firstble = new QLabel("Page1",firstPageWidget);
firstble->setFont(serifFont);
QWidget *secondPageWidget = new QWidget;
QLabel *secondble = new QLabel("Page2",secondPageWidget);
secondble->setFont(serifFont);
QWidget *thirdPageWidget = new QWidget;
QLabel *thirdble = new QLabel("Page3",thirdPageWidget);
thirdble->setFont(serifFont);

QStackedWidget *stackedWidget = new QStackedWidget(this);
stackedWidget->addWidget(firstPageWidget);
stackedWidget->addWidget(secondPageWidget);
stackedWidget->addWidget(thirdPageWidget);
stackedWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);
stackedWidget->move(300,200);
stackedWidget->setFixedWidth(200);
stackedWidget->setFixedHeight(200);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedWidget);
setLayout(layout);

QComboBox *pageComboBox = new QComboBox(this);
pageComboBox->addItem(tr("Page 1"));
pageComboBox->addItem(tr("Page 2"));
pageComboBox->addItem(tr("Page 3"));
connect(pageComboBox, QOverload<int>::of(&QComboBox::activated),
        stackedWidget, &QStackedWidget::setCurrentIndex);
pageComboBox->move(100,200);
相关推荐
熬夜苦读学习16 分钟前
Linux进程信号
linux·c++·算法
榆榆欸32 分钟前
14.主从Reactor+线程池模式,Connection对象引用计数的深入分析
linux·服务器·网络·c++·tcp/ip
编程侦探1 小时前
【设计模式】原型模式:用“克隆”术让对象创建更灵活
c++·设计模式·原型模式
Once_day2 小时前
Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV
linux·c++·sse·x64·sigsegv·xmm0
JhonKI2 小时前
【从零实现Json-Rpc框架】- 项目实现 - 客户端注册主题整合 及 rpc流程示意
c++·qt·网络协议·rpc·json
__lost2 小时前
为什么new分配在堆上,函数变量在栈上+递归调用时栈内存的变化过程
c++·内存分配
序属秋秋秋3 小时前
算法基础_基础算法【位运算 + 离散化 + 区间合并】
c语言·c++·学习·算法·蓝桥杯
jyyyx的算法博客3 小时前
【再探图论】深入理解图论经典算法
c++·算法·图论
念_ovo3 小时前
【算法/c++】利用中序遍历和后序遍历建二叉树
数据结构·c++·算法
Vitalia3 小时前
⭐算法OJ⭐寻找最短超串【动态规划 + 状态压缩】(C++ 实现)Find the Shortest Superstring
开发语言·c++·算法·动态规划·动态压缩