qt 开发笔记堆栈布局的应用

1.概要

画面中有一处位置,有个按钮点击后,这片位置完全换成另一个画面,这中情况特别适合用堆栈布局。

//堆栈布局的应用

#include <QStackedLayout>

QStackedLayout *layout = new QStackedLayout(this);

layout->setCurrentIndex(0);

//信号和槽的链接

QPushButton *foundButton = findChild<QPushButton *>("pushButton_2");

if (foundButton) {

// 连接点击事件

connect(foundButton, &QPushButton::clicked, this, &FormMy1::onButtonClicked);

}

private slots:

void onButtonClicked();

2.代码

2.1 FormMy1

复制代码
#ifndef FORMMY1_H
#define FORMMY1_H

#include <QWidget>
#include <QStackedLayout>

namespace Ui {
class FormMy1;
}

class FormMy1 : public QWidget
{
    Q_OBJECT

public:
    QStackedLayout *layout;
    explicit FormMy1(QWidget *parent = nullptr);
    ~FormMy1();
private slots:
    void onButtonClicked();
private:
    Ui::FormMy1 *ui;
};

#endif // FORMMY1_H

#include "formmy1.h"
#include "ui_formmy1.h"
#include <QPushButton>

FormMy1::FormMy1(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::FormMy1)
{
    ui->setupUi(this);
    // 根据名称查找按钮
    QPushButton *foundButton = findChild<QPushButton *>("pushButton_2");
    if (foundButton) {
        // 连接点击事件
        connect(foundButton, &QPushButton::clicked, this, &FormMy1::onButtonClicked);
    }
}

void FormMy1::onButtonClicked() {
    // 处理按钮点击事件
    //qDebug("Button clicked!");
    layout->setCurrentIndex(1);
}

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

2.2 FormMy2

复制代码
#ifndef FORMMY2_H
#define FORMMY2_H

#include <QWidget>
#include <QStackedLayout>

namespace Ui {
class FormMy2;
}

class FormMy2 : public QWidget
{
    Q_OBJECT

public:
    QStackedLayout *layout;
    explicit FormMy2(QWidget *parent = nullptr);
    ~FormMy2();
private slots:
    void onButtonClicked();
private:
    Ui::FormMy2 *ui;
};

#endif // FORMMY2_H

#include "formmy2.h"
#include "ui_formmy2.h"

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

    // 根据名称查找按钮
    QPushButton *foundButton = findChild<QPushButton *>("pushButton");
    if (foundButton) {
        // 连接点击事件
        connect(foundButton, &QPushButton::clicked, this, &FormMy2::onButtonClicked);
    }
}

void FormMy2::onButtonClicked() {
    // 处理按钮点击事件
    //qDebug("Button clicked!");
    layout->setCurrentIndex(0);
}

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

2.3 FormStacked

复制代码
#ifndef FORMSTACKED_H
#define FORMSTACKED_H

#include <QWidget>

namespace Ui {
class FormStacked;
}

class FormStacked : public QWidget
{
    Q_OBJECT

public:
    explicit FormStacked(QWidget *parent = nullptr);
    ~FormStacked();

private:
    Ui::FormStacked *ui;
};

#endif // FORMSTACKED_H

#include "formstacked.h"
#include "ui_formstacked.h"
#include <QStackedLayout>
#include "formmy1.h"
#include "formmy2.h"

FormStacked::FormStacked(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::FormStacked)
{
    ui->setupUi(this);
    QStackedLayout *layout = new QStackedLayout(this);
    FormMy1* my1 = new FormMy1(this);
    my1->layout = layout;
    FormMy2* my2 = new FormMy2(this);
    my2->layout = layout;
    layout->addWidget(my1);
    layout->addWidget(my2);

    layout->setCurrentIndex(0); // 初始显示第二个窗口部件
    //this->setLayout(layout);
}

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

2.4 Widget

复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

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

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

2.5 main.cpp

复制代码
#include "widget.h"

#include <QApplication>

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

3.运行结果

相关推荐
南桥几晴秋12 分钟前
QT按钮控件
开发语言·qt
雍凉明月夜28 分钟前
深度学习网络笔记Ⅴ(Transformer源码详解)
笔记·深度学习·transformer
week_泽38 分钟前
小程序云函数全面总结笔记_5
笔记·小程序
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [fs]read_write
linux·笔记·学习
别了,李亚普诺夫1 小时前
PCB设计学习笔记
笔记·学习
koo3642 小时前
pytorch深度学习笔记10
pytorch·笔记·深度学习
FakeOccupational2 小时前
【电路笔记 电源模块】MOSFET导通&线性工作条件 + 栅极驱动芯片 + 高压侧N沟道MOS管驱动器
笔记
半夏知半秋2 小时前
rust学习-探讨为什么需要标注生命周期
开发语言·笔记·学习·算法·rust
我要学好英语2 小时前
矩阵论笔记整理
笔记·线性代数·矩阵
MindCareers2 小时前
Beta Sprint Day 1-2: Alpha Issue Fixes Initiated + Mobile Project Setup
android·c语言·数据库·c++·qt·sprint·issue