Qt 26 布局管理器5 -布局管理器实验,实现向导用户界面及切换

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注意:

当有若干个组件被添加到同一个布局管理器中,并且将当前布局管理器设置到 某个窗口QWidget时,那么此时就隐式的指定了布局管理器中的所有组件的父组件都是 该 QWidget 组件。

Widget.h

#ifndef _WIDGET_H_
#define _WIDGET_H_

#include <QtGui/QWidget>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QStackedLayout>

class Widget : public QWidget
{
    Q_OBJECT

private:
    //水平布局管理器 管理 上一个 下一个 按钮
    QPushButton preBtn;//按键
    QPushButton nextBtn;

    //创建窗口1 :QWidget + 网格布局管理器 + QLabel
    QLabel fLbl1; //标签
    QLabel fLbl2;
    QLabel fLbl3;
    QLabel fLbl4;

    //创建窗口2 :QWidget + 表单布局管理器 + QLineEdit
    QLineEdit sLineEdit; //文本输入框

    //创建窗口3 : QWidget + 垂直布局管理器 + QPushButton
    QPushButton tPushBtn1;
    QPushButton tPushBtn2;

    //栈式布局管理器对象 管理上面3个窗口
    QStackedLayout sLayout;

    void initControl();
    QWidget* get1stPage();
    QWidget* get2ndPage();
    QWidget* get3rdPage();
private slots:
    void onPreBtnClicked();
    void onNextBtnClicked();
public:
    Widget(QWidget* parent = 0);
    ~Widget();
};

#endif // _WIDGET_H_

Widget.cpp

#include "Widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QFormLayout>
#include <QDebug>

Widget::Widget(QWidget *parent) : QWidget(parent)
{
    initControl();
}

void Widget::initControl()
{
    //创建水平,垂直布局管理器对象
    QVBoxLayout* vLayout = new QVBoxLayout();
    QHBoxLayout* hLayout = new QHBoxLayout();

    /*设置 上一步 下一步按钮*/
    preBtn.setText("Pre Page");//标签
    //在水平 垂直方向对 按键进行扩展
    preBtn.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    preBtn.setMinimumSize(160, 30);

    nextBtn.setText("Next Page");
    nextBtn.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    nextBtn.setMinimumSize(160, 30);

    //响应按键
    connect(&preBtn, SIGNAL(clicked()), this, SLOT(onPreBtnClicked()));
    connect(&nextBtn, SIGNAL(clicked()), this, SLOT(onNextBtnClicked()));

    //将两个按键添加到水平布局管理器
    hLayout->addWidget(&preBtn);
    hLayout->addWidget(&nextBtn);

    //向栈式布局管理器添加 三个组件
    sLayout.addWidget(get1stPage());//下标0
    sLayout.addWidget(get2ndPage());//下标1
    sLayout.addWidget(get3rdPage());//下标2

    //垂直布局管理器 管理 水平布局管理器+栈式布局管理器
    vLayout->addLayout(&sLayout);
    vLayout->addLayout(hLayout);

    setLayout(vLayout);
}

// 隐式指定了 当前四个标签的父组件是 QWidget 窗口1 
QWidget* Widget::get1stPage()
{
    //创建窗口1 和 网格布局管理器
    QWidget* ret = new QWidget();
    QGridLayout* layout = new QGridLayout();

    //设置标签显示内容
    fLbl1.setText("This");
    fLbl2.setText("is");
    fLbl3.setText("1st");
    fLbl4.setText("page");

    //将标签添加到 网格布局管理器
    layout->addWidget(&fLbl1, 0, 0);
    layout->addWidget(&fLbl2, 0, 1);
    layout->addWidget(&fLbl3, 1, 0);
    layout->addWidget(&fLbl4, 1, 1);

    //将当前 网格布局管理器QGridLayout 设置到当前窗口QWidget,即QGridLayout生效
    ret->setLayout(layout);

	/*验证 四个标签的父组件地址*/
    qDebug()<< ret;
    qDebug()<< fLbl1.parent();
    qDebug()<< fLbl2.parent();
    qDebug()<< fLbl3.parent();
    qDebug()<< fLbl3.parent();

    return ret;//QWidget
}

 //隐式指定了 当前文本输入框的父组件是 QWidget 窗口2 
QWidget* Widget::get2ndPage()
{
    //创建窗口2 和 表单布局管理器
    QWidget* ret = new QWidget();
    QFormLayout* layout = new QFormLayout();

    sLineEdit.setText("This is 2rd page");//设置文本输入框 并设置输入框中显示内容

    layout->addRow("Hint:", &sLineEdit);// 向 表单布局管理器 添加文本输入框组件 并指定标签

    //将当前 表单布局管理器QFormLayout 设置到当前窗口QWidget,即QFormLayout生效
    ret->setLayout(layout);

    return ret;//QWidget
}

 //隐式指定了 当前两个按钮的父组件是 QWidget 窗口3 
QWidget* Widget::get3rdPage()
{
    //创建窗口3 和 垂直布局管理器
    QWidget* ret = new QWidget();
    QVBoxLayout* layout = new QVBoxLayout();

    //设置按键显示内容
    tPushBtn1.setText("This is");
    tPushBtn2.setText("3rd page");

    //向垂直布局管理器 添加 tPushBtn1,tPushBtn2
    layout->addWidget(&tPushBtn1);
    layout->addWidget(&tPushBtn2);

    //将当前 垂直布局管理器QVBoxLayout 设置到当前窗口QWidget,即QVBoxLayout生效
    ret->setLayout(layout);

    return ret;//QWidget
}

void Widget::onPreBtnClicked()
{
    //currentIndex():获取当前显示的组件下标
    //减1 得到上一个组件下标
    int index = ((sLayout.currentIndex() - 1) + 3) % 3;

    //设置当前显示的组件是哪一个,下标为index
    sLayout.setCurrentIndex(index);
}

void Widget::onNextBtnClicked()
{
    //currentIndex():获取当前显示的组件下标
    //加1 得到下一个组件下标
    int index = (sLayout.currentIndex() + 1) % 3;

    //设置当前显示的组件是哪一个,下标为index
    sLayout.setCurrentIndex(index);
}

Widget::~Widget()
{
    
}

main.cpp

#include <QtGui/QApplication>
#include "Widget.h"

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/115262843