QT基础之堆栈窗体QStackedWidget类


更多参见
QT基础与实例应用目录

QStackedWidget类简介

QStackedWidget类提供了一堆部件,一次只能看到其中一个部件。QStackedWidget 可用于创建类似于QTabWidget 提供的用户界面。它是一个构建在 QStackedLayout类之上的便捷布局部件。

QStackedLayout 一样,QStackedWidget 可以构造并填充多个子部件(“页面”)。

	QLabel *firstOageWidget = new QLabel(tr("firstOageWidget")); // 可以是其他 widget
    QLabel *secondPageWidget =  new QLabel(tr("secondPageWidget"));
    QLabel *thirdPageWidget =  new QLabel(tr("thirdPageWidget"));
    QStackedWidget *stackedWidget = new QStackedWidget(this);
    stackedWidget->addWidget(firstOageWidget);
    stackedWidget->addWidget(secondPageWidget);
    stackedWidget->addWidget(thirdPageWidget);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(stackedWidget);
    setLayout(layout);

QStackedWidget 没有为用户提供切换页面的内在方法。 这通常通过存储 QStackedWidget 页面标题的 QComboBoxQListWidget 来完成。

	QComboBox *pageComboBox = new QComboBox();
    pageComboBox->addItem(tr("Page 1"));
    pageComboBox->addItem(tr("Page 2"));
    pageComboBox->addItem(tr("Page 3"));
    connect(pageComboBox, SIGNAL(activated(int)),stackedWidget, SLOT(setCurrentIndex(int)));

填充堆叠部件时,部件将添加到内部列表中。indexOf() 函数返回该列表中部件的索引。部件可以使用 addWidget() 函数添加到列表的末尾,也可以使用insertWidget()函数插入到给定的索引处。removeWidget()函数从堆叠部件中删除部件。可以使用 count()函数获取堆叠部件中包含的部件数量。

简单Demo和说明

在实际应用中,QStackedWidget多与列表框QListWidget及下拉表框QComboBox配合使用。

在这里插入图片描述

GitHub链接 :StackDlg

    setWindowTitle(tr("QT基础之堆栈窗体QStackedWidget类"));
    // 创建 一个 QListWidget 控件对象 ,用于同 QStackedWidget 关联
    list = new QListWidget();
    list->addItem(tr("List 1"));
    list->addItem(tr("List 2"));
    list->addItem(tr("List 3"));


    // 创建 三个 QLabel 标签控件对象,作为堆栈窗口需要显示的三层窗体
    label1 = new QLabel(tr("WindowTest1"));
    label2 = new QLabel(tr("WindowTest2"));
    label3 = new QLabel(tr("WindowTest3"));

    // 创建 QStackedWidget 堆栈窗体对象
    stackedWidget = new QStackedWidget(this);
    // 将 三个 QLabel 标签控件对象 插入 QStackedWidget
    stackedWidget->addWidget(label1);
    stackedWidget->addWidget(label2);
    stackedWidget->addWidget(label3);
    // 创建 布局
    QHBoxLayout *layout = new QHBoxLayout(this);// 水平布局

    layout->setMargin(5); // 对话框或窗体 边距 5
    layout->setSpacing(5); // 各个控件之间的间距 5
    layout->addWidget(list);
    layout->addWidget(stackedWidget,5,Qt::AlignCenter);
    layout->setStretchFactor(list,1); // 设定可伸缩控件
    layout->setStretchFactor(stackedWidget,3);
    connect(list, SIGNAL(currentRowChanged(int)),stackedWidget, SLOT(setCurrentIndex(int)));

希望我的文章对于大家有帮助,由于个人能力的局限性,文中可能存在一些问题,欢迎指正、补充!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值