Qt中QStackedLayout类用法(菜单叶切换界面)

本文主要总结用QStackedLayout类的用法,主要通过新建一个实例,体现QStackedLaout类可以应用在切换菜单上。QStackedLaout类是属于布局管理器中的一个常用类。

下面是一个实例,该实例是顶部两个菜单按钮,分别点击两个按钮,将会切换不同页面。比如点击pageOne按钮,则切换到第一页;点击pageTwo按钮,则切换到第二页。

1.1新建一个widget工程,以及两个类,类名分别为PageOne和PageTwo。然后在如下文件添加代码:

pageone.h

 

#ifndef PAGEONE_H
#define PAGEONE_H

#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>


class PageOne : public QWidget
{
    Q_OBJECT
public:
    explicit PageOne(QWidget *parent = nullptr);

signals:

public slots:

private:
    QVBoxLayout *pageOneLayout;
    QPushButton *m_pushButton;

};

#endif // PAGEONE_H

pageone.cpp

#include "pageone.h"

PageOne::PageOne(QWidget *parent) : QWidget(parent)
{
    pageOneLayout = new QVBoxLayout(this);              //注意,this表示在这个widget窗口显示
    m_pushButton = new QPushButton;
    m_pushButton->setText(tr("成功切换到第一页!"));
    pageOneLayout->addWidget(m_pushButton);
}
pagetwo.h

 

#ifndef PAGETWO_H
#define PAGETWO_H

#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>

class PageTwo : public QWidget
{
    Q_OBJECT
public:
    explicit PageTwo(QWidget *parent = nullptr);

signals:

public slots:

private:
    QVBoxLayout *pageOneLayout;
    QPushButton *m_pushButton;
};

#endif // PAGETWO_H

pagetwo.cpp

 

#include "pagetwo.h"

PageTwo::PageTwo(QWidget *parent) : QWidget(parent)
{
    pageOneLayout = new QVBoxLayout(this);              //注意,this表示在这个widget窗口显示
    m_pushButton = new QPushButton;
    m_pushButton->setText(tr("成功切换到第二页!"));
    pageOneLayout->addWidget(m_pushButton);
}

 

widget.h

 

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QStackedLayout>

#include "pageone.h"
#include "pagetwo.h"



class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void On_PushButton1Result();
    void On_PushButton2Result();

private:
    QVBoxLayout *mainLayout;
    QHBoxLayout *topLayout;
    QStackedLayout *stackLayout;
    QPushButton *m_pushButton1,*m_pushButton2;
    PageOne *m_pageOne;
    PageTwo *m_pageTwo;
};

#endif // WIDGET_H

widget.cpp

 

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //初始化
    this->setObjectName("mainWidget");
    this->setStyleSheet("#mainWidget{background-color:rgb(10,90,130);}");

    mainLayout = new QVBoxLayout;
    topLayout = new QHBoxLayout;
    stackLayout = new QStackedLayout;

    m_pushButton1 = new QPushButton;
    m_pushButton1->setText("pageOne");
    m_pushButton1->setFixedHeight(50);      //设定按钮固定高度
//    m_pushButton1->setStyleSheet("color:rgb(255,0,0);border:none");     //设置按钮字体颜色,无边框
//    m_pushButton1->setFlat(true);           //祛除边框
    m_pushButton2 = new QPushButton;
    m_pushButton2->setText("pageTwo");
    m_pageOne = new PageOne;
    m_pageTwo = new PageTwo;

    //窗口布局
//    topLayout->addWidget(m_pushButton1,0,Qt::AlignLeft | Qt::AlignCenter);
    topLayout->setMargin(0);               //控件与窗体左右间距
    topLayout->setSpacing(0);              //Layout内部控件间距
    topLayout->addWidget(m_pushButton1);
    topLayout->addWidget(m_pushButton2);


    stackLayout->addWidget(m_pageOne);      //第一页
    stackLayout->addWidget(m_pageTwo);      //第二页
    stackLayout->setCurrentIndex(0);        //默认stackLayout显示第0页
    mainLayout->addLayout(topLayout);       //顶部界面
    mainLayout->addLayout(stackLayout);     //中间界面
    mainLayout->setMargin(0);               //控件与窗体左右间距
    mainLayout->setSpacing(0);              //Layout内部控件间距
    mainLayout->setStretchFactor(topLayout,1);
    mainLayout->setStretchFactor(stackLayout,10);

    setLayout(mainLayout);                   //设置唯一布局   这句也可以用mainLayout = new QVBoxLayout(this);替代

    connect(m_pushButton1,SIGNAL(clicked(bool)),this,SLOT(On_PushButton1Result()));
    connect(m_pushButton2,SIGNAL(clicked(bool)),this,SLOT(On_PushButton2Result()));
}

Widget::~Widget()
{

}

void Widget::On_PushButton1Result()
{
    //按钮1槽函数
    stackLayout->setCurrentIndex(0);        //切换到stackLayout第一页
}

void Widget::On_PushButton2Result()
{
    //按钮2槽函数
    stackLayout->setCurrentIndex(1);        //切换到stackLayout第二页
}

 

main.c

 

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

 

 

1.2程序构建运行后,如下图所示。

        

 

由以上结果可知,该QStackedLayout类可以用在切换菜单界面上。

 

 

参考内容:

https://blog.csdn.net/gyhguoge01234/article/details/53141613(重点参考)

https://blog.csdn.net/liang19890820/article/details/51539851

http://www.cnblogs.com/qq78292959/archive/2012/08/13/2637209.html(其它布局管理器用法)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三公子Tjq

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

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

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

打赏作者

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

抵扣说明:

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

余额充值