根据B站《最新QT从入门到实战完整版|传智教育》学习的,BV号:BV1g4411H78N
打开窗口关闭窗口,两种实现方式
1.两个按钮,点击第一个按钮open window打开一个新窗口,点击第二个窗口close window关闭新窗口
2.一个按钮,点击一次,按钮的名字从open window变为close window,并且弹出一个新窗口;
再次点击,按钮名字从close window变为open window,并且关闭新窗口
实例
两个按钮
两个按钮的相对简单,直接看代码吧!本人小白,如果有可以改进的地方求大佬指点,谢谢!
newwidget.h
#ifndef NEWWIDGET_H
#define NEWWIDGET_H
#include <QWidget>
class newWidget : public QWidget
{
Q_OBJECT
public:
explicit newWidget(QWidget *parent = nullptr);
void OpenWindow();
void CloseWindow();
void OCWindow();
QWidget * n = new QWidget;
bool jud = false;
signals:
};
#endif // NEWWIDGET_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<newwidget.h>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
newWidget * n;
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
newwidget.cpp
#include "newwidget.h"
#include<qwidget.h>
#include<widget.h>
newWidget::newWidget(QWidget *parent) : QWidget(parent)
{
}
void newWidget::OpenWindow()
{
//第二个窗口实现
//第二个窗口命名
n->setWindowTitle("The second window");
n->show();
}
void newWidget::CloseWindow()
{
//关闭窗口
n->close();
}
widget.cpp
#include "widget.h"
#include<QPushButton>
#include<newwidget.h>
#include<QDebug>
#include<QObject>
//打开窗口关闭窗口,两种实现方式:1.两个按钮,一个开一个关 2.一个按钮,按一下打开,按钮名字变关闭,再按关闭,关闭窗口
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//定义一个newwidget对象
this->n = new newWidget(this);
//两个按钮的情况
//定义两个按钮
QPushButton * btn = new QPushButton;
QPushButton * btn2 = new QPushButton;
//重置窗口大小
this->resize(600,400);
//按钮命名、依附、改变位置
btn->setParent(this);
btn2->setParent(this);
btn->setText("Open window");
btn2->setText("close window");
btn2->move(100,0);
//窗口命名
setWindowTitle("OPEN OR CLOSE");
//连接信号和槽
connect(btn,&QPushButton::clicked,n,&newWidget::OpenWindow);
connect(btn2,&QPushButton::clicked,n,&newWidget::CloseWindow);
}
Widget::~Widget()
{
}
一个按钮
一个按钮的情况我做了好久,之前思路被限制在两个connect上了,后面从网上找了半天也没有解决,直到看了一个贴子才发现脑袋瓜被限制了呀。这段代码是我摸爬滚打写出来的,有改进的地方同样也希望大佬指点,谢谢各位大佬!!!
newwidget.h
#ifndef NEWWIDGET_H
#define NEWWIDGET_H
#include <QWidget>
class newWidget : public QWidget
{
Q_OBJECT
public:
explicit newWidget(QWidget *parent = nullptr);
void OCWindow(); //定义槽函数
QWidget * n = new QWidget;
bool jud = false;
signals:
};
#endif // NEWWIDGET_H
widget.h和上面的一样我就不重复粘贴了
main.cpp和上面的一样我就不重复粘贴了
newwidget.cpp
#include "newwidget.h"
#include<qwidget.h>
#include<widget.h>
newWidget::newWidget(QWidget *parent) : QWidget(parent)
{
}
void newWidget::OCWindow()
{
//判断按钮此时的状态,并且执行打开或关闭操作
if(jud == false)
{
n->setWindowTitle("The second window");
n->show();
jud = true;
}
else
{
n->close();
jud = false;
}
}
widget.cpp
#include "widget.h"
#include<QPushButton>
#include<newwidget.h>
//打开窗口关闭窗口,两种实现方式:1.两个按钮,一个开一个关 2.一个按钮,按一下打开,按钮名字变关闭,再按关闭,关闭窗口
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//定义一个newwidget对象
this->n = new newWidget(this);
//一个按钮
//定义一个按钮
QPushButton * btn3 = new QPushButton("Open window",this);
//重置按钮大小
btn3->resize(120,100);
//移动按钮位置
btn3->move(235,135);
//重置窗口大小
this->resize(600,400);
//重命名窗口
setWindowTitle("OPEN OR CLOSE");
bool jud = false;
//连接,使用Lambda表达式
connect(btn3,&QPushButton::clicked,this,[=,&jud](){
n->OCWindow();
if(jud == false)
{
jud = true;
btn3->setText("close window");
}
else
{
jud = false;
btn3->setText("open window");
}
});
}
Widget::~Widget()
{
}