第三章 Qt5布局管理——3.3堆栈窗体QStackedWidget类

QStackedWidget 类提供了一个小部件堆栈,其中一次只看到一个小部件可见。

可以理解为切换窗口。

例子:当选择左侧列表框中不同的选项时,右侧显示所选的不同的窗体。列表框使用QListWiddget。效果图如下:

cpp 复制代码
#ifndef STACKDLG_H
#define STACKDLG_H

#include <QDialog>
#include <QStackedWidget>
#include <QListWidget>
#include <QLabel>

class StackDlg : public QDialog
{
    Q_OBJECT
    //所需的部件
    QListWidget * list;//列表框
    QStackedWidget * stack;//堆栈框
    QLabel * label1;//三个标签
    QLabel * label2;
    QLabel * label3;

public:
    StackDlg(QWidget *parent = 0);
    ~StackDlg();
};

#endif // STACKDLG_H
cpp 复制代码
#include "stackdlg.h"
#include <QLayout>

StackDlg::StackDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("StackedWidget"));
    //新建一个QListWidget控件对象
    list = new QListWidget(this);
    //在新建的QListWidget控键中插入三个条目,作为选择项
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));
    //创建三个QLabel标签控制对象,作为堆栈窗口显示的三层窗体
    label1 = new QLabel(tr("WindowTest1"));
    label2 = new QLabel(tr("WindowTest2"));
    label3 = new QLabel(tr("WindowTest3"));
    stack = new QStackedWidget(this);//新建一个QStackWidget堆栈窗体对象

    //将创建三个QLabel标签控件依次插入堆栈窗体中
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);
    QHBoxLayout * mainLayout = new QHBoxLayout(this);//整个对话框布局

    mainLayout->setMargin(5);//设定对话框的边距5
    mainLayout->setSpacing(5);//设定各个控件之间的间距5
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignHCenter);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,3);
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
    //将QListWidget的currentRowChanged()信号与栈堆窗体的setCurrentIndex()槽函数连接起来,
    //实现按选择显示窗体。此处的堆栈窗体index按插入的顺序从0起依次排序,与QListWidget的条目排序相一致。
}

StackDlg::~StackDlg()
{

}
相关推荐
techdashen3 分钟前
Go Map 详解:键值对实际上是如何存储的
开发语言·后端·golang
程序猿乐锅26 分钟前
【计算机组成原理 | 第六章】中央处理器 CPU
java·开发语言
Terra.K34 分钟前
ThreadLocal解决一个线程里面跨层传递问题
java·开发语言·后端
变与不变8061 小时前
引用类型、内存原理与对象
开发语言·前端·javascript
wuyk5551 小时前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习
weixin_440730501 小时前
socket解决多次输入问题-大数据接收问题-模块动态导入
java·开发语言·servlet
励志不掉头发的内向程序员2 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互
www_aiyuanma_vip2 小时前
Java个人博客系统
java·开发语言
leoZ2312 小时前
第 7 篇:进阶——校验、联动、列表页
开发语言·前端·javascript·vue.js·人工智能·目标检测·ecmascript
luj_17682 小时前
虚实交融中的真实人物塑造
c语言·开发语言·网络·经验分享·算法