QT5布局管理---3.3分割窗口QStackedWidget类

堆栈窗体QStackedWidget类也是应用程序中经常用到的。在实际应用中,堆栈窗体多于列表框QListWidget及下拉列表框QComboBox配合使用。

一、实现效果

堆栈窗体QStackedWidget类的使用,当选择左侧列表框中不同的选项时,右侧显示所选的不同的窗体。在此使用列表框QListWidget,效果如下:

二、实现步骤

(1)新建Qt Widget Application,项目名称为:"StackedWidget",基类选择“QDialog”,基类命名为“StackDlg”,取消“创建界面”复选框的选中状态。

(2)打开“StackDlg.h”文件:

#ifndef STACKDLG_H
#define STACKDLG_H

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

class stackDlg : public QDialog
{
    Q_OBJECT

public:
    stackDlg(QWidget *parent = nullptr);
    ~stackDlg();
private:
    QListWidget *list;
    QStackedWidget *stack;
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
};
#endif // STACKDLG_H

(3)打开“StackDlg.cpp”文件:

#include "stackdlg.h"
#include "QHBoxLayout"

stackDlg::stackDlg(QWidget *parent)
    : QDialog(parent)
{
    //设置窗体固定大小(宽度,高度)
    this->setFixedSize(600,600);

    //设置窗口标题
    setWindowTitle(tr("StackWidget"));

    //设置一个Qlistwidget控件对象
    list =new QListWidget();

    //在新建的Qlistwidget控件中插入三条目录,作为选择项
    list->insertItem(0,tr("Windows1"));
    list->insertItem(1,tr("Windows2"));
    list->insertItem(2,tr("Windows3"));

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

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

    //设定对话框(或窗口)的边距为5
    mainLayout->setMargin(5);
    //设定各个控件之间的间距为5
    mainLayout->setSpacing(5);
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignHCenter);
    mainLayout->setStretchFactor(list,0);           //a
    mainLayout->setStretchFactor(stack,3);          //b
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));

}

stackDlg::~stackDlg()
{
}

其中:

(a)mainLayout->setStretchFactor(list,0) :设定可伸缩控件,第1个参数用于指定设置的控件(序号从0起编号),第2个参数的值大于0则表示此控件为可伸缩控件

(b)mainLayout->setStretchFactor(stack,3) :将QListWidget的currentRowChanged()信号与堆栈的窗体的setCurrentIndex()槽函数连接起来,实现按选择显示窗体。此处的堆栈窗体index按插入的顺序从0起依次排序,与QListWidget的条目排序相一致。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值