一、目的
点击open按钮,打开一个新窗口,同时生成一个新按钮close,点击close按钮关闭新窗口。
二、代码
我创建的项目类叫mywidget
首先是mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QPushButton>
namespace Ui {
class myWidget;
}
class myWidget : public QWidget
{
Q_OBJECT
public:
explicit myWidget(QWidget *parent = nullptr);
~myWidget();
void newButton();//用来显示新按钮,cpp中实现
QPushButton *btn2;
private:
Ui::myWidget *ui;
};
#endif // MYWIDGET_H
和默认的区别就是加了两行代码
void newButton();//用来显示新按钮,cpp中实现
QPushButton *btn2;
然后是mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::myWidget)
{
ui->setupUi(this);
//新建open按钮,并设置大小和位置
QPushButton * btn = new QPushButton;
btn->setParent(this);
btn->setText("open");
this->resize(600,400);
btn->resize(120,60);
btn->move(240,100);
//新建一个窗口,不调用show是不会显示的
QWidget * newwidget = new QWidget;
//按下open按钮,弹出新窗口
connect(btn,&QPushButton::clicked,newwidget,[=](){
newwidget->show();
newwidget->resize(300,200);
newwidget->move(1350,350);});
//弹出close按钮
this->btn2 = new QPushButton("close1",this);
btn2->resize(120,60);
btn2->move(100,233);
btn2->setVisible(false);//先设置为不可见,调用newButton函数后再可见。
connect(btn,&QPushButton::clicked,this,&myWidget::newButton);//同一信号连不同槽
//弹出close按钮用lambda方法
QPushButton *btn3 = new QPushButton("close2",this);
btn3->setVisible(false);
connect(btn,&QPushButton::clicked,this,[=](){
btn3->setVisible(true);
btn3->resize(120,60);
btn3->move(350,233);
});
//点击close,关闭新窗口。(不同信号连同一个槽)
connect(btn2,&QPushButton::clicked,newwidget,&myWidget::close);
connect(btn3,&QPushButton::clicked,newwidget,&myWidget::close);
}
void myWidget::newButton()
{
btn2->setVisible(true);
}
myWidget::~myWidget()
{
delete ui;
}