当前位置: 首页 > article >正文

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;
}


http://www.kler.cn/a/612254.html

相关文章:

  • 资本运营:基于Python实现的资本运作模拟
  • Java中用Stream流取出分组后每组最大值对象的ID
  • AI编辑器-Trae 玩转AI 编程
  • 在rockylinux9.4安装mongodb报错:缺少:libcrypto.so.10文件库
  • 【docker】Dockerfile中ENTRYPOINT和CMD区别理解
  • 如何使用DeepSeek编写测试用例?
  • 2025年前端八股文整理持续更新中(css+js+vue)
  • 23种设计模式-创建型模式-建造者
  • Linux 指令篇:tar 命令详解与实战
  • ADB->查看具体应用包名、安装路径、所有应用包名输出到文件
  • 蓝桥杯--bfs专题第二个题目(leetcode103二叉树)
  • [操作系统] 进程间通信:命名管道原理与操作
  • 使用ProcessBuilder执行FFmpeg命令,进程一直处于阻塞状态,一直没有返回执行结果
  • PHP MySQL 预处理语句
  • 基于yolov11的铁路轨道铁轨缺陷检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • Excel处理控件Aspose.Cells指南:如何在不使用 Microsoft Excel 的情况下解锁 Excel 工作表
  • 结合代码理解Spring AOP的概念(切面、切入点、连接点等)
  • vue watch数据监听
  • 关于spark在yarn上运行时候内存的介绍
  • 【Minio-优化浅谈】