目录
增加第二个窗口
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()
{
}
重点 connect(&w,&subwidget::mySinal,this,&mainWidget::dealsubwindows);//按钮 和槽的联系
w的信号 ,这个基类窗口 响应 槽函数;
添加子窗口成员
subwidget.h里面;添加个信号;添加个槽;添加个按钮
添加的信号成员;给主窗口接受的信号 signals:/*信号必须有signals 关键字来声明* 信号没有返回值,但可以有参数* 信号就是函数的声明,只需声明,无需定义* 使用:emit mySignal();* */void mySinal();
#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 关键字
}
emit mySinal();//槽里面发送个信号 必须有emit 关键字
补充回顾
构造函数是一种特殊的成员函数,用于创建和初始化对象时调用
所以在主函数中
mainWidget w;//执行基类的构造函数 声明,就执行构造函数mainWidget::mainWidget(QWidget *parent) 这就是构造函数: QWidget(parent){里面的this 指定为 mainWidget类型的 声明 w 也就是窗口控件;
}
带参信号
在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();
void mySinal(int,QString);//qT的字符串类型 QString
/*信号名字已经相同,所以信号重载
* 有重载的信号,需要用函数指针;
* 用重载的信号,只能用指针
* */
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 关键字
emit mySinal(250,QString("我是子窗口"));//发送带参信号
}
在主窗口构造函数处理信号
用函数指针来确定使用那个重载的信号;
添加个槽打印参数;subwindows_printf(int a,QString str)
参函数定义 void mainWidget::subwindows_printf(int a,QString str)
信号,和槽函数响应
void (subwidget::*p_sinal )(int ,QString)=&subwidget::mySinal;//依靠类型指针(带参),来区分重载函数;connect(&w,p_sinal,this,&mainWidget::subwindows_printf);//按钮 和槽的联系
#include "mainwidget.h"
#include<QPushButton>
#include<QDebug>
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();
void (subwidget::*p_not)()=&subwidget::mySinal;//依靠类型指针,来区分重载函数;
connect(&w,p_not,this,&mainWidget::dealsubwindows);//按钮 和槽的联系
void (subwidget::*p_sinal )(int ,QString)=&subwidget::mySinal;//依靠类型指针(带参),来区分重载函数;
connect(&w,p_sinal,this,&mainWidget::subwindows_printf);//按钮 和槽的联系
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::subwindows_printf(int a,QString str)
{
qDebug()<< a<<str.toUtf8().data();//显示a和str
}
mainWidget::~mainWidget()
{
}
在槽函数调用打印的时候
qDebug()在头文件QDebug需要包含头文件
#include<QDebug>
主窗口的.h文件的成员变量
#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();//添加一个槽 关闭子 开主窗口
void subwindows_printf(int a,QString str);//
private: //添加两个私有成员 按键控件
QPushButton b1;
QPushButton *b2;
QPushButton b3;//设置b3按钮
subwidget w;//添加一个私有为子窗
};
#endif // MAINWIDGET_H
qDebug()<< a<<str.toUtf8().data();
toUtf8() 选中,F1进入帮助文档;
QByteArray QString::toUtf8() const
Returns a UTF-8 representation of the string as a QByteArray.//转换UTF8返回字符的字节数组
data() 选中,F1进入帮助文档;
char * QByteArray::data()
Returns a pointer to the data stored in the byte array。//返回一个指针,存储数组的指针
回顾补充:
选中QT的函数,F1进入快速浏览帮助文档,再按F1进入全屏帮助文档,ESC退出查阅