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(其它布局管理器用法)

猜你喜欢

转载自blog.csdn.net/naibozhuan3744/article/details/80728783