一、建立一个新框体
二、实现两个类(框体)信号的传递
1.实现的方法图
2.相关的代码
subwidget.h
#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include <QWidget>
#include <QPushButton>
class SubWidget : public QWidget
{
Q_OBJECT
public:
explicit SubWidget(QWidget *parent = nullptr);
signals: //自定义信号,必须signals声明
void sigSub();
/*
* 1.可以有参数
* 2.可以重载
* 3.返回值为void
* 4.发送信号:(emit + 信号名字;)
* emit sigSub();
*/
public slots:
void myslot();
private:
QPushButton* b1;
};
#endif // SUBWIDGET_H
subwidget.cpp
#include "subwidget.h"
SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
b1 = new QPushButton("中腾",this);
b1->resize(100,100);
setWindowTitle("软件园窗口");
resize(400,600);
//按一个按钮,告诉我自己我这个按钮已经按下去了
connect(b1,&QPushButton::clicked,this,&SubWidget::myslot);
}
//发送一个自定义信号,这个信号就会告诉主窗口,因为这个信号是属于subW这个对象的。
void SubWidget::myslot()
{
//发送信号
emit sigSub();
}
mainwidgt.h
#ifndef MAINWIDGT_H
#define MAINWIDGT_H
#include <QWidget>
#include <QPushButton>
#include "subwidget.h"
class MainWidgt : public QWidget
{
Q_OBJECT
public:
MainWidgt(QWidget *parent = nullptr);
~MainWidgt();
//自定义槽函数
void slotForMainWidget();
void slotHideMe();
void slotShowMe();
private:
QPushButton* b1;
QPushButton* b2;
QPushButton* b3; //显示子窗口
//子窗口对象
SubWidget subW;
};
#endif // MAINWIDGT_H
mainwidgt.cpp
#include "mainwidgt.h"
MainWidgt::MainWidgt(QWidget *parent)
: QWidget(parent)
{
//init
b1 = new QPushButton("老大",this);
b1->move(100,100);
//init
b2 = new QPushButton("老二",this);
b2->setParent(this);
b2->setText("老二");
b2->move(200,200);
/*
* qt 信号和槽他们都是函数
* 1.信号只有函数声明,不需要函数定义
* 2.槽函数既需要声明,也需要函数定义,其实是一个回调函数(当时机成熟才执行)
*/
//connect(b1,&QPushButton::pressed,this,&MainWidgt::close);
connect(b1,&QPushButton::pressed,this,&MainWidgt::slotForMainWidget);
/*
* 自定义槽函数
* 1.槽函数在Qt5 可以是任意成员函数,全局函数,静态函数,lambda表达式(隐式函数)
* 2.槽函数需要与信号相对应(返回值,参数)
* 3.信号没有返回值,槽函数返回值:void
* 4.void mysig(int, double,QString);
* void myslot(int,double,Qstring);
* 5.槽函数的参数是为了接受信号传过来的数据
* 6.槽函数的参数应该是不能够大于信号的参数个数,可以少于信号的参数个数
* void mysig(int, double,QString);
* void myslot(int,double);
* 7.槽函数可以重载
*/
//b3 显示子窗口SubWidget ---subW
b3 = new QPushButton("软件园",this);
b3->resize(100,50);
b3->move(200,200);
//在写Qt的过程中,自定义信号是用的非常多的,因为可以给两个毫不相关的类(窗口)建立联系
connect(b3,&QPushButton::clicked,this,&MainWidgt::slotHideMe);
//subW中的sigSub自定义信号来之后触发槽函数进行业务处理
connect(&subW,&SubWidget::sigSub,this,&MainWidgt::slotShowMe);
}
MainWidgt::~MainWidgt()
{
}
void MainWidgt::slotForMainWidget(){
b2->setText("我被老大改名字了。。。");
}
void MainWidgt::slotHideMe()
{
//隐藏自己
hide();
//显示软件园窗口
subW.show();
}
void MainWidgt::slotShowMe()
{
//显示自己
show();
//隐藏软件园窗口
subW.hide();
}