20、布局(QStackedWidget)

发布时间 2023-12-25 16:40:04作者: 秃头的C#

QStackedWidget 是 Qt 框架中的一个容器类,它可以用来管理多个窗口或页面,只显示其中一个窗口或页面。在 QStackedWidget 中,只有当前激活的窗口或页面可见,其他窗口或页面被隐藏。

使用 QStackedWidget 可以方便地实现页面切换效果,比如制作一个具有多个页面的向导,或者实现一个选项卡式的界面。

举例:

#include "widget.h"
#include "ui_widget.h"
#include <QHBoxLayout>
#include <QDebug>
#include "widget1.h"
#include "widget2.h"

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

    btnGroup= new QButtonGroup(this);
    QStringList navList;
    navList << QStringLiteral("widget1") << QStringLiteral("widget2");
    QVBoxLayout* vlayout = new QVBoxLayout(this);
    vlayout->setContentsMargins(10,10,10,10);
    QWidget *navWidget = new QWidget(this);
    QHBoxLayout* hlayout=new QHBoxLayout(navWidget);
    hlayout->setSpacing(10);
    hlayout->setAlignment(Qt::AlignTop);
    for (int i = 0;i<navList.count() ;i++) {
        QPushButton *btn= new QPushButton(navList.at(i));
        btn->setMinimumSize(80,30);
        hlayout->addWidget(btn);
        //设置按钮可选中按下类似复选框的功能
        btn->setCheckable(true);
        qDebug() << i;
        //加入group
        btnGroup->addButton(btn, i);
        connect(btn,&QPushButton::clicked,this,[=](){
            click_btn(i);
        });

    }
    vlayout->addWidget(navWidget);



    mainWidget=new QStackedWidget;
    mainWidget->setMinimumHeight(400);

    mainWidget->addWidget(new Widget1());
    mainWidget->addWidget(new Widget2());
    vlayout->addWidget(mainWidget);


}

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

void Widget::click_btn(int index)
{

    qDebug() << index;
    mainWidget->setCurrentIndex(index);
}