如图:程序打开时按钮名为Open
点击按钮后,打开新窗口,按钮名变为Close
所使用Qt版本为5.9.9,Qt Creator版本为4.11.0
原理:在打开和关闭新窗口时改变flag的值,通过flag值,判断打开或者关闭新窗口。
代码实现:
widget.h
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include "newwindow.h"#include <QPushButton>class Widget : public QWidget{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QPushButton *btn = new QPushButton(); //在此处定义btn目的是为了在函数中改变btn的名称void ToggleWindow();newWindow *new_win; bool flag; //判断窗口状态};#endif // WIDGET_H
widget.cpp
#include "widget.h"#include <QPushButton>#include "newwindow.h"#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent){btn->setParent(this);btn->setText("Open");resize(400,400);connect(btn,&QPushButton::clicked,this,&Widget::ToggleWindow); //将按钮连接信号槽识别按钮按下事件}Widget::~Widget(){}void Widget::ToggleWindow(){if(flag){new_win = new newWindow();new_win->resize(200,200);new_win->show(); //使该新建类显示new_win->setAttribute(Qt::WA_DeleteOnClose); //关闭窗口时释放内存防止内存泄漏flag = 0;btn->setText("Close");qDebug() << "OpenWindow Over!";}else{new_win->close();flag = 1;btn->setText("Open");qDebug() << "CloseWindow Over!";}}
附qDebug输出记录: