connect(&b1, &QPushButton::pressed, this, &Widget::close);
需要用到connect( )函数;
&b1:是指信号发出者,必须是指针类型
&QPushButton::pressed:处理的信号,也就是,&发送者的类名::信号名字
this:信号接收者
&Widget::close:槽函数,信号处理函数; &接收者类名::槽函数的名字
#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include <QWidget>
#include <QPushButton>
class SubWidget : public QWidget
{
Q_OBJECT
public:
explicit SubWidget(QWidget *parent = nullptr);
void sendslot();
signals:
//信号必须有signals关键字来声明
//信号没有返回值,但可以有参数
//信号就是函数的声明,只需声明,无需定义
//使用: emit mysignal();
void mysignal();
public slots:
private:
QPushButton b;
};
#endif // SUBWIDGET_H
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include "subwidget.h"
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
void mysolt();
void change();
void dealSub();
private:
QPushButton b1;
QPushButton *b2;
QPushButton b3;
SubWidget w;
};
#endif // WIDGET_H
#include "widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);
b1.setText("还在犹豫什么");
b1.move(100,100);
b2 = new QPushButton(this);
b2 ->setText("点击充值");
connect(&b1,&QPushButton::pressed,this,&Widget::close);
//&b1: 信号发出者,指针类型
//&QPushButton::pressed: 处理的信号, &发送者的类名::信号名字
//this: 信号接收者
//&Widget::close: 槽函数, 信号处理函数, &接收的类名::槽函数的名字
//自定义槽,普通函数的用法
//QT5:任意的成员函数、普通全局函数、静态函数
//槽函数需要和信号一致(参数,返回值)
//由于信号都是没有返回值,所以槽函数一定没有返回值
connect(b2,&QPushButton::released,this,&Widget::mysolt);
connect(b2,&QPushButton::released,&b1,&QPushButton::hide);
setWindowTitle("天王盖地虎");
b3.setParent(this);
b3.setText("点击领取一个对象");
b3.move(50,50);
// w.show();
//显示子窗口
connect(&b3,&QPushButton::released,this,&Widget::change);
//处理子窗口的信号
connect(&w,&SubWidget::mysignal,this,&Widget::dealSub);
resize(400,300);
}
void Widget::mysolt()
{
b2->setText("充值成功");
}
void Widget::change()
{
//子窗口显现
w.show();
//主窗口隐藏
hide();
}
void Widget::dealSub()
{
//子窗口隐藏
w.hide();
//主窗口显现
show();
}
Widget::~Widget()
{
}
#include "subwidget.h"
SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
setWindowTitle("宝塔镇河妖");
b.setParent(this);
b.setText("你怕别是个傻子");
connect(&b,&QPushButton::clicked,this,&SubWidget::sendslot);
resize(400,300);
}
void SubWidget::sendslot()
{
emit mysignal();
}
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}