目录
增加第二个窗口
主窗口文件添加一个私有成员为子窗口
定义两个槽函数和 关联按钮和子窗口和主窗口
添加子窗口成员
子窗口处理函数
补充回顾
增加第二个窗口
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_OBJECTpublic: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函数构造的wb1.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函数构造的wb1.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_OBJECTpublic: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退出查阅