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

笔记 · 2023-08-06 · 734 人浏览
Qt:一个按钮打开和关闭新窗口

  这是看完lambda、自定义信号和之后完成的第一个作业,在cannect中使用匿名函数实现该功能。

需求描述

如下图:该程序运行时按钮显示为“Open”,在点击其中的按钮后,按钮显示为“Close”并且弹出一个新的窗口。最后点击“Close”关闭该窗口。

程序打开时按钮为“Open”:


点击按钮后,按钮变成“Close”并弹出新的窗口:


备注:所使用Qt版本为5.14.2,Qt Creator版本为4.11.1


代码实现

实现原理

  首先构造一个基于 widget 的子类窗口(newWindow)来作为新的窗口(new_wd) ,随后再创建一个按钮(btn)通过connect函数将我们建立好的 new_wd 关联起来。其中利用匿名函数使用btn->text()来判断此时按钮的状态来实现打开和关闭功能。

相关代码如下

newwindow.h 和 main.cpp 未做任何更改。

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include "newwindow.h" // 新的窗口

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    NewWindow new_wd;
    QPushButton* btn;
};
#endif // WIDGET_H

newwindow.cpp:

#include "newwindow.h"

NewWindow::NewWindow(QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle("新的窗口");
    //resize(400, 400);
}

widget.cpp:

#include "widget.h"
#include "newwindow.h"
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    /*************** 主窗属性 *****************/
    this->setWindowTitle("My_FirstProject");
    resize(600, 400);


    /*************** 按钮对象 *****************/
    QPushButton* btn = new QPushButton("Open", this);
    // 属性设置
    btn->move(270, 130);
    btn->resize(80, 80);

    // 事件1:点击按钮变成Close,同时弹出新的窗口
    // 事件2:点击按钮变成Open,同时关闭新的窗口
    connect(btn, &QPushButton::clicked, this, [=](){
        // 显示新的窗口
        if(btn->text() == "Open")
        {
            btn->setText("Close");
            new_wd.resize(500, 300);
            new_wd.move(1200, 100);
            new_wd.show();
        }
        else
        {
            btn->setText("Open");
            new_wd.close();
        }
    });


    /*************** 显示新窗口 ***************/
    //new_wd.show();

}

Widget::~Widget()
{
}

以上代码仅供参考。如若有任何问题,还望大佬指正!

Qt
  1. w 2023-08-06

    已经开始学可视化厉害

    1. Justin_Wu (作者)  2023-08-06
      @w

      网络小白初窥门径🤣

Theme Jasmine by Kent Liao

本网站由 又拍云 提供CDN加速/云存储服务

鄂ICP备2023005457号    鄂公网安备 42011302000815号

欢迎来自 * · * 的用户