【QT中堆栈布局的实现】

学习分享

1、环境设置,头文件

该示例使用C++14实现,因此在QT项目pro文件中修改配置

使用智能指针实现,需要的头文件为:

cpp 复制代码
#include <memory>

2、.h文件

2.1、主界面.h文件

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStackedLayout>
#include "dialogq.h"
#include "dialogw.h"
#include <memory>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;
    QStackedLayout * layout;
    std::unique_ptr<Dialogq> dialog11;
    std::unique_ptr<Dialogw> dialog22;
};

#endif // MAINWINDOW_H

2.2、对话界面1.h文件

cpp 复制代码
#ifndef DIALOGQ_H
#define DIALOGQ_H

#include <QWidget>

namespace Ui {
class Dialogq;
}

class Dialogq : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Dialogq *ui;
};

#endif // DIALOGQ_H

2.3、对话界面2.h文件

cpp 复制代码
#ifndef DIALOGW_H
#define DIALOGW_H

#include <QWidget>

namespace Ui {
class Dialogw;
}

class Dialogw : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Dialogw *ui;
};

#endif // DIALOGW_H

3、.cpp文件

3.1、对话界面1.cpp

cpp 复制代码
#include "dialogq.h"
#include "ui_dialogq.h"

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

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

3.2、对话界面2.cpp

cpp 复制代码
#include "dialogw.h"
#include "ui_dialogw.h"

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

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

3.3、主界面.cpp

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStackedLayout>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->dialog11 =std::make_unique<Dialogq>();
    this->dialog22 =std::make_unique<Dialogw>();

    this->layout =new QStackedLayout(ui->frame);

    this->layout->addWidget(dialog11.get());
    this->layout->addWidget(dialog22.get());
}

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

void MainWindow::on_pushButton_clicked()
{
    this->layout->setCurrentWidget(dialog11.get());
}

void MainWindow::on_pushButton_2_clicked()
{
    this->layout->setCurrentWidget(dialog22.get());
}

3.4、main.cpp

cpp 复制代码
#include "mainwindow.h"
#include <QApplication>

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

    return a.exec();
}
相关推荐
Neverfadeaway17 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康17 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼18 小时前
JavaWeb_p165部门管理
java·开发语言·前端
一成码农18 小时前
JavaSE面向对象(下)
java·开发语言
偶尔的鼠标人18 小时前
Avalonia DataGrid 控件的LostFocus事件会多次触发
开发语言·c#
晚风残18 小时前
【C++ Primer】第十二章:动态内存管理
开发语言·c++·c++ primer
_extraordinary_18 小时前
Java Spring日志
java·开发语言·spring
初圣魔门首席弟子19 小时前
【C++ 学习】单词统计器:从 “代码乱炖” 到 “清晰可品” 的复习笔记
开发语言·c++
lsx20240619 小时前
SQL UPDATE 语句详解
开发语言
郝学胜-神的一滴19 小时前
计算机图形学中的光照模型:从基础到现代技术
开发语言·c++·程序人生·图形渲染