逻辑倒是不难,难的在于有一个写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
运行结果: