这是看完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()
{
}
以上代码仅供参考。如若有任何问题,还望大佬指正!
已经开始学可视化厉害
网络小白初窥门径🤣