十四、堆栈窗体

十四、堆栈窗体QStackedWidget

QStackedWidget 可用于创建类似于 QTabWidget 提供的用户界面。它是建立在QStackedLayout 类之上的便捷布局小部件。

QStackedWidget控件就像一个窗口一样,提供一些控件专门提供一些控件,并且每次只能有一个控件可见,被设置为当前的控件。

下面完成一个案例

这次我们创建QDialog工程。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

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

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    Ui::Dialog *ui;

    QStackedWidget *sw;
    QListWidget *lw;

    QLabel *lb1,*lb2,*lb3;
};
#endif // DIALOG_H

 dialog.cpp

首先实例化QListWidget对象

    lw=new QListWidget(this);

    lw->insertItem(0,"zhangsan");
    lw->insertItem(1,"lisi");
    lw->insertItem(2,"wangwu");

再实现QLabel对象,并且放入到QStackedWidget对象中去

    lb1=new QLabel("zhangsan0");
    lb2=new QLabel("lisi1");
    lb3=new QLabel("wangwu2");

    sw=new QStackedWidget(this);
    sw->addWidget(lb1);
    sw->addWidget(lb2);
    sw->addWidget(lb3);

可以看到左上角显示一个zhangsan0,只显示一个是因为QStackedWidget控件被设置只有当前一个控件可见。

然后进行布局

    QHBoxLayout *hbl=new QHBoxLayout(this);

    hbl->setMargin(10);
    hbl->setSpacing(20);

    hbl->addWidget(lw);
    hbl->addWidget(sw,0,Qt::AlignCenter);

    hbl->setStretchFactor(lw,1);
    hbl->setStretchFactor(sw,0);

setMargin函数和setSpacing函数看这里

void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()):

将小部件添加到此框布局的末尾,拉伸因子为拉伸和对齐对齐。
拉伸因子仅适用于QBoxLayout的方向,并且相对于此QBoxLayout中的其他框和小部件。具有较高拉伸系数的部件和框会长得更多。
如果拉伸因子为0,并且QBoxLayout中没有其他任何拉伸因子大于0,则根据涉及的每个小部件的QWidget:sizePolicy()分配空间。

对齐方式由对齐方式指定。默认对齐方式为0,这意味着小部件填充整个单元格。

bool QBoxLayout::setStretchFactor(QWidget *widget, int stretch):

为widget设置拉伸因子,如果在此布局中找到widget(不包括子布局)则返回true;否则返回false。

完整代码

#include "dialog.h"
#include "ui_dialog.h"

#include<QHBoxLayout>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    setWindowTitle("堆栈窗口测试");

    lw=new QListWidget(this);

    lw->insertItem(0,"zhangsan");
    lw->insertItem(1,"lisi");
    lw->insertItem(2,"wangwu");

    lb1=new QLabel("zhangsan0");
    lb2=new QLabel("lisi1");
    lb3=new QLabel("wangwu2");

    sw=new QStackedWidget(this);
    sw->addWidget(lb1);
    sw->addWidget(lb2);
    sw->addWidget(lb3);

    QHBoxLayout *hbl=new QHBoxLayout(this);

    hbl->setMargin(10);
    hbl->setSpacing(20);

    hbl->addWidget(lw);
    hbl->addWidget(sw,0,Qt::AlignCenter);

    hbl->setStretchFactor(lw,1);
    hbl->setStretchFactor(sw,0);
}

Dialog::~Dialog()
{
    delete ui;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mo Yan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值