Qt:一个按钮实现打开和关闭新窗口

如图:程序打开时按钮名为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_OBJECT

public:
    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输出记录:

在这里插入图片描述

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在Qt,要实现窗口关闭打开一个窗口,可以使用信号与槽机制来实现。 首先,在需要打开窗口,我们可以定义一个槽函数,用于接收来自其他窗口的信号。这个槽函数可以是一个普通的成员函数,用于打开新窗口。 接下来,在需要关闭窗口,在窗口关闭的事件发送一个信号。可以使用窗口的closeEvent()函数来捕获窗口关闭事件,并发出自定义的信号。 然后,在主窗口,创建需要打开窗口对象,并将其信号与关闭窗口的槽函数进行连接。可以使用QObject类的connect()函数来实现信号与槽的连接。 最后,运行程序,当关闭窗口时,会触发窗口关闭事件,发送关闭信号,从而触发槽函数,打开新的窗口。 例如:代码示例 MainWindow.h定义: ``` class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void openNewWindow(); private: Ui::MainWindow *ui; AnotherWindow *anotherWindow; }; ``` MainWindow.cpp实现: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); anotherWindow = new AnotherWindow(); connect(this, SIGNAL(close()), anotherWindow, SLOT(show())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::openNewWindow() { // 打开新窗口的逻辑 } ``` AnotherWindow.h定义: ``` class AnotherWindow : public QWidget { Q_OBJECT public: AnotherWindow(QWidget *parent = nullptr); ~AnotherWindow(); public slots: void showNewWindow(); private: Ui::AnotherWindow *ui; }; ``` AnotherWindow.cpp实现: ``` AnotherWindow::AnotherWindow(QWidget *parent) : QWidget(parent), ui(new Ui::AnotherWindow) { ui->setupUi(this); connect(this, SIGNAL(show()), this, SLOT(showNewWindow())); } AnotherWindow::~AnotherWindow() { delete ui; } void AnotherWindow::showNewWindow() { // 显示新窗口的逻辑 } ``` 这样,当关闭窗口时,会触发主窗口的close()信号,并调用槽函数openNewWindow(),从而执行打开新窗口的逻辑。同时,新窗口的槽函数showNewWindow()会在其信号show()被触发时调用,执行显示新窗口的逻辑。 ### 回答2: 在Qt,要实现窗口关闭打开一个窗口,可以通过以下步骤来实现: 1. 创建两个窗口类,比如`MainWindow`和`SecondWindow`。在这两个类的头文件,使用`#include`指令引入Qt相关的头文件,并继承`QMainWindow`类。 2. 在`MainWindow`类,在构造函数创建一个按钮,并设置按钮的文本为"打开窗口"。连接按钮的`clicked()`信号到槽函数`openSecondWindow()`。 3. 在`openSecondWindow()`槽函数,创建一个`SecondWindow`类的对象,然后使用`show()`函数显示该窗口。 4. 在`SecondWindow`类,可以继续添加其他窗口需要的控件。 5. 在`MainWindow`的实现文件实现`openSecondWindow()`槽函数,通过`SecondWindow`类的构造函数创建一个`SecondWindow`类的对象,并显示出来。 6. 编译运行程序后,在`MainWindow`点击"打开窗口"按钮,`SecondWindow`窗口将会显示出来。 下面是示例代码: mainwindow.h文件: ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void openSecondWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H ``` mainwindow.cpp文件: ```cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "secondwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QPushButton *button = new QPushButton("打开窗口", this); connect(button, &QPushButton::clicked, this, &MainWindow::openSecondWindow); } MainWindow::~MainWindow() { delete ui; } void MainWindow::openSecondWindow() { SecondWindow *secondWindow = new SecondWindow(this); secondWindow->show(); } ``` secondwindow.h文件: ```cpp #ifndef SECONDWINDOW_H #define SECONDWINDOW_H #include <QMainWindow> namespace Ui { class SecondWindow; } class SecondWindow : public QMainWindow { Q_OBJECT public: explicit SecondWindow(QWidget *parent = nullptr); ~SecondWindow(); private: Ui::SecondWindow *ui; }; #endif // SECONDWINDOW_H_H ``` secondwindow.cpp文件: ```cpp #include "secondwindow.h" #include "ui_secondwindow.h" SecondWindow::SecondWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::SecondWindow) { ui->setupUi(this); } SecondWindow::~SecondWindow() { delete ui; } ``` 以上就是使用Qt实现窗口关闭打开一个窗口的简单示例。通过点击`MainWindow`按钮,可以打开一个新的`SecondWindow`窗口。 ### 回答3: 在Qt,要在关闭一个窗口打开一个窗口,我们可以使用信号与槽机制来实现。首先,我们需要定义两个窗口类,一个是用于关闭窗口类,另一个是要打开窗口类。 在关闭窗口,我们可以重写closeEvent()函数来捕捉窗口关闭事件。在该函数,我们可以发射一个自定义的信号,表示窗口关闭。例如: ```cpp void CloseWindow::closeEvent(QCloseEvent *event) { // 发射自定义的关闭信号 emit windowClosed(); // 执行默认的关闭操作 event->accept(); } ``` 在打开窗口,我们可以使用槽函数来接收关闭信号,并在槽函数实现打开一个窗口的操作。例如: ```cpp void OpenWindow::openNewWindow() { // 创建新的窗口对象 NewWindow *newWindow = new NewWindow(); // 显示新的窗口 newWindow->show(); } ``` 接下来,我们需要在主程序连接信号与槽,并执行Qt的事件循环。例如: ```cpp int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建关闭窗口对象 CloseWindow *closeWindow = new CloseWindow(); // 创建打开窗口对象 OpenWindow *openWindow = new OpenWindow(); // 连接关闭信号与打开槽函数 QObject::connect(closeWindow, SIGNAL(windowClosed()), openWindow, SLOT(openNewWindow())); // 显示关闭窗口 closeWindow->show(); // 执行Qt的事件循环 return a.exec(); } ``` 这样,当关闭窗口关闭时,就会发射关闭信号,触发打开槽函数,在槽函数实现打开一个窗口的操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值