增加第二个窗口
1、
2、
3
主窗口文件添加一个私有成员为子窗口
在mainwidget.h文件
同时添加两个槽;来处理两个窗口;
void changwindow();主窗口 按键后进入这个槽
void dealsubwindows(); 子窗口的发信号 后 进入这个槽
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include<QPushButton>//添加按键头文件
#include <QWidget>
#include"subwidget.h"
class mainWidget : public QWidget
{
Q_OBJECT
public:
mainWidget(QWidget *parent = 0);
~mainWidget();
void myslot();//声明一个共有 ,自定义一个槽为共有成员
void changwindow();//添加一个槽 关闭 主窗口 打开子窗口
void dealsubwindows();//添加一个槽 关闭子 开主窗口
private: //添加两个私有成员 按键控件
QPushButton b1;
QPushButton *b2;
QPushButton b3;//设置b3按钮
subwidget w;//添加一个私有为子窗
};
#endif // MAINWIDGET_H
定义两个槽函数和 关联按钮和子窗口和主窗口
mainwidget.c文件里面
#include "mainwidget.h"
#include<QPushButton>
mainWidget::mainWidget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);//this 是这个窗口。就是main函数构造的w
b1.setText("close");
b1.move(100,100);
b2 = new QPushButton(this);//新建个空间给b2指针
b2->setText("send");
// connect(&b1,&QPushButton::pressed,this,&mainWidget::close );
//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),接收动作类+作用域+函数(槽函数)
connect(b2,&QPushButton::pressed,this,&mainWidget::myslot);
//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),控件类+作用域+函数(槽函数)
connect(b2,&QPushButton::pressed,&b1,&mainWidget::hide);//hide 隐藏
//按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(按键),控件类+作用域+函数(槽函数)
this->setWindowTitle("老大");
b3.setParent(this);
b3.setText("切换到子窗口");
b3.move(50,50);
connect(&b3,&QPushButton::released,this,&mainWidget::changwindow);//按钮 和槽的联系
// w.show();
connect(&w,&subwidget::mySinal,this,&mainWidget::dealsubwindows);//按钮 和槽的联系
resize(500,500);//设定窗口大小
}
void mainWidget:: myslot()//槽函数的定义,自定义槽
{
b2->setText("123");//槽函数的函数动作
}
void mainWidget::changwindow()//槽函数处理
{
this->hide();//关掉mainWidget基类 主窗口
w.show();//子窗口 显示
}
void mainWidget::dealsubwindows()//槽函数处理
{
this->show();//打开mainWidget基类 主窗口
w.hide();//子窗口 关闭
}
mainWidget::~mainWidget()
{
}
添加子窗口成员
subwidget.h里面;添加个信号;添加个槽;添加个按钮
#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include <QWidget>
#include<QPushButton>//
class subwidget : public QWidget
{
Q_OBJECT
public:
explicit subwidget(QWidget *parent = 0);
void sendSlots();//槽函数,响应按钮,发送信号
signals:
/*信号必须有signals 关键字来声明
* 信号没有返回值,但可以有参数
* 信号就是函数的声明,只需声明,无需定义
* 使用:emit mySignal();
* */
void mySinal();
public slots:
//新加的窗口 私有成员 按键 b
private:
QPushButton b;
};
#endif // SUBWIDGET_H
子窗口处理函数
#include "subwidget.h"
#include<QPushButton>
subwidget::subwidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle("小弟");//设置子窗口的标题
b.setParent(this);//给b指定 父类
b.setText("返回主窗口");//设置按钮文本
connect(&b,&QPushButton::clicked,this,&subwidget::sendSlots);//
//按键 按下 这个基类相应个槽函
resize(500,500);//限制大小
}
void subwidget::sendSlots()
{
emit mySinal();//槽里面发送个信号 必须有emit 关键字
}