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.运行结果

相关推荐
齐 飞18 分钟前
MongoDB笔记02-MongoDB基本常用命令
前端·数据库·笔记·后端·mongodb
flying robot28 分钟前
Go结构体(struct)
笔记
王俊山IT41 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(1)
开发语言·c++·笔记·学习
RationalDysaniaer1 小时前
Gin入门笔记
笔记·gin
xing25161 小时前
张氏宗谱序言白话文翻译
笔记
gma9992 小时前
【Effective C++】阅读笔记3
c++·笔记
安冬的码畜日常3 小时前
【The Art of Unit Testing 3_自学笔记06】3.4 + 3.5 单元测试核心技能之:函数式注入与模块化注入的解决方案简介
笔记·学习·单元测试·jest
Bruce小鬼3 小时前
QT创建按钮篇
开发语言·qt
快乐点吧4 小时前
BERT 模型在句子分类任务中的作用分析笔记
笔记·分类·bert
逻辑与&&4 小时前
[Prometheus学习笔记]从架构到案例,一站式教程
笔记·学习·prometheus