QT使用单按钮/双按钮实现开关子窗口

逻辑倒是不难,难的在于有一个写Java的来写这个,解耦就挺难受的

项目目录

在这里插入图片描述

1、双按钮实现开关子窗口(相对较简单)

  • widget.h:子窗口类对象声明(添加newWidget.h头文件)
  • newWidget.h:保持原样
  • widget.cpp:实例化2个按钮及已声明的子窗口类(使用库函数及lambda表达式)
  • newWidget.cpp:保持原样
//newWidget.h
#ifndef NEWWIDGET_H
#define NEWWIDGET_H

#include <QWidget>

class newWidget : public QWidget
{
    Q_OBJECT
public:
    explicit newWidget(QWidget *parent = nullptr);


signals:

};

#endif // NEWWIDGET_H

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include "newwidget.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    newWidget *win;
private:
    Ui::Widget *ui;

};
#endif // WIDGET_H
//newWidget.cpp
#include "newwidget.h"
#include<widget.h>

newWidget::newWidget(QWidget *parent) : QWidget(parent)
{

}

//Widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>

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

    // 主界面有open close两个按钮
    QPushButton * open = new QPushButton("open",this);
    QPushButton * close = new QPushButton("close",this);
    open->move(0,0);
    close->move(100,0);
    resize(380,300);
    setWindowTitle("主窗口");

    // 设置子窗口
    this->win = new newWidget;
    win->resize(350,200);
    win->setWindowTitle("子窗口");

    connect(open,&QPushButton::clicked,this,[=](){win->show();});
    connect(close,&QPushButton::clicked,this,[=](){win->close();});


}


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

2、单按钮实现开关子窗口

//newWidget.h
#ifndef NEWWIDGET_H
#define NEWWIDGET_H

#include <QWidget>

class newWidget : public QWidget
{
    Q_OBJECT
public:
    explicit newWidget(QWidget *parent = nullptr);
//    void OpenWindow();
//    void CloseWindow();

signals:

};

#endif // NEWWIDGET_H

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include "newwidget.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    newWidget *win;
    //一个按钮的操作
    QPushButton *btn;

    //展示子窗口函数
    void showNewWindow();
private:
    Ui::Widget *ui;

};
#endif // WIDGET_H
//newWidget.h
#ifndef NEWWIDGET_H
#define NEWWIDGET_H

#include <QWidget>

class newWidget : public QWidget
{
    Q_OBJECT
public:
    explicit newWidget(QWidget *parent = nullptr);
//    void OpenWindow();
//    void CloseWindow();

signals:

};

#endif // NEWWIDGET_H

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include "newwidget.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    newWidget *win;
    //一个按钮的操作
    QPushButton *btn;

    //展示子窗口函数
    void showNewWindow();
private:
    Ui::Widget *ui;

};
#endif // WIDGET_H

运行结果

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值