参考:Qt基础 练习:弹出新窗口并关闭的两种实现方式(两个按钮、一个按钮)_qt打开一个窗口另一个关闭-CSDN博客
实现:两个按钮,点击第一个按钮open window打开一个新窗口,点击第二个窗口close window关闭新窗口
目录
1.新建文件
2.声明函数
3.函数实现
4.创建按钮和连接
5.运行结果
6.完整代码
1.新建文件
右键-添加新文件
2.声明函数
我们需要打开和关闭窗口,所以需要一个函数来执行打开窗口的操作,另一个函数来执行关闭窗口的操作,在此声明
#ifndef MYWINDOW_H
#define MYWINDOW_H#include <QWidget>class myWindow : public QWidget
{Q_OBJECT
public:explicit myWindow(QWidget *parent = nullptr);void OpenWindow();void CloseWindow();
signals:
};#endif // MYWINDOW_H
除此之外,还需要一个一个对象,以便后续操作
QWidget *n=new QWidget;
3.函数实现
#include "mywindow.h"
#include"mainwindow.h"
#include"qwidget.h"myWindow::myWindow(QWidget *parent): QWidget{parent}
{}//打开第二个窗口的实现
void myWindow::OpenWindow()
{n->setWindowTitle("The second window");//第二个窗口命名n->show();
}//关闭第二个窗口的实现
void myWindow::CloseWindow()
{n->close();
}
分别调用show()和close()来实现。
4.创建按钮和连接
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QPushButton"
#include"mywindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->n=new myWindow(this);this->resize(600,400);//创建两个按钮QPushButton *btn1=new QPushButton;QPushButton *btn2=new QPushButton;//给按钮1、2设置依附btn1->setParent(this);btn2->setParent(this);//给按钮1、2命名btn1->setText("Open window");btn2->setText("Close window");//改变按钮2的位置,防止与按钮1重合btn2->move(100,0);//给当前窗口命名setWindowTitle("Open or Close");btn1->resize(100,50);btn2->resize(100,50);//连接信号和槽connect(btn1,&QPushButton::clicked,n,&myWindow::OpenWindow);connect(btn2,&QPushButton::clicked,n,&myWindow::CloseWindow);
}MainWindow::~MainWindow()
{delete ui;
}
5.运行结果
6.完整代码
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<mywindow.h>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;myWindow *n;
};
#endif // MAINWINDOW_H
mywindow.h
#ifndef MYWINDOW_H
#define MYWINDOW_H#include <QWidget>class myWindow : public QWidget
{Q_OBJECT
public:explicit myWindow(QWidget *parent = nullptr);void OpenWindow();void CloseWindow();QWidget *n=new QWidget;
signals:
};#endif // MYWINDOW_H
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
mywindow.cpp
#include "mywindow.h"
#include"mainwindow.h"
#include"qwidget.h"myWindow::myWindow(QWidget *parent): QWidget{parent}
{}//打开第二个窗口的实现
void myWindow::OpenWindow()
{n->setWindowTitle("The second window");//第二个窗口命名n->show();
}//关闭第二个窗口的实现
void myWindow::CloseWindow()
{n->close();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QPushButton"
#include"mywindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->n=new myWindow(this);this->resize(600,400);//创建两个按钮QPushButton *btn1=new QPushButton;QPushButton *btn2=new QPushButton;//给按钮1、2设置依附btn1->setParent(this);btn2->setParent(this);//给按钮1、2命名btn1->setText("Open window");btn2->setText("Close window");//改变按钮2的位置,防止与按钮1重合btn2->move(100,0);//给当前窗口命名setWindowTitle("Open or Close");btn1->resize(100,50);btn2->resize(100,50);//连接信号和槽connect(btn1,&QPushButton::clicked,n,&myWindow::OpenWindow);connect(btn2,&QPushButton::clicked,n,&myWindow::CloseWindow);
}MainWindow::~MainWindow()
{delete ui;
}