Qt弹出新窗口并关闭(两个按钮)
参考: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_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
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;
}