QT学习心得1:信号与槽

  1. 信号与槽的概念

信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。个事件发生,比如,按钮检测到自己被点击了一下(button),它就会发出一个signal。这种发出是没有目的的,类似广播。如果有对象对信号感兴趣它就会使用connect函数,意思是,将想要处信号和自己一个函数slot))绑定来处信号。也就是说,当信号发出槽函数会自动被。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。

2.系统自带的信号与槽

connect()函数最常用的一般形式:

connect(sender, signal, receiver, slot);

参数解释:

sender:发出信号的对象signal:发送对象发出的信号receiver:接收信号的对象。

signal:发送对象发出的信号。

receiver:接收信号的对象。

slot:接收对象在接收到信号之后所需要调用的函数(槽函数)

1#include "widget.h"
2#include <QPushButton>
3Widget::Widget(QWidget *parent)
4: QWidget(parent)
5 {
6//创建一个按钮 点击按钮关闭窗口
7//this‐>close();
8QPushButton *p = new QPushButton("关闭",this);
9//设置连接 点击按钮产生信号 会调用窗口的close函数
10connect(p,&QPushButton::clicked,this, &QWidget::close);
11 }
12
13 Widget::~Widget()
14 {
15
16 }

3按钮常用的信号

4.自定义的槽函数

1#ifndef WIDGET_H
2#define WIDGET_H
3
4#include <QWidget>
5#include <QPushButton>
6class Widget : public QWidget
7 {
8	Q_OBJECT
9
10public:
11Widget(QWidget *parent = 0);
12~Widget();
13QPushButton *button;
14public slots:
15void print();//槽函数
16
17 };
18
19 #endif // WIDGET_H
1#include "widget.h"
2#include <QDebug>
3Widget::Widget(QWidget *parent)
4: QWidget(parent)
5 {
6button = new QPushButton;
7button‐>setParent(this);
8button‐>setText("打印gt牛逼");
9//注册信号与槽的连接
10//槽函数可以是普通的成员函数 还可以是槽函数
11//如果信号没有参数 槽函数也不能有参数 如果信号有参数,槽函数可以有也可以没有
12connect(button,&QPushButton::pressed,this,&Widget::print);
13
14 }
15
16	void Widget::print()
17	{
18
19	qDebug()<<”gt最牛逼";
20	}
21 Widget::~Widget()
22 {
23
24 }

5.自定义信号(本身也是一个函数)

5.1:子函数

5.1.1:首先要创造出一个父类是qwidget的子窗口,因为在子窗口中无法控制父窗口,所以在子窗口内定义并且发射了信号1。

5.1.2:子窗口内需要定义一个按钮,并且设置名字再加以显示出来。

5.1.3:然后子窗口内进行信号(按钮的按下)与槽函数(emit_shingle)的连接,及按下按钮2--->执行发送槽函数->发送show_single信号给父窗口。

5.2:父函数

5.2.1:首先父函数内要定义可以指向子函数的指针(sonwindow),还有他本身的按钮(1),以及按钮槽函数和信号槽函数。

5.2.2:设置父窗口的名字,以及显示子窗口,因为子窗口就在父窗口里面创建的,父窗口是可以控制子窗口滴。设置父窗口按钮的名字并且显示出来。 

5.2.3:进行点击信号与按钮1的连接->执行按钮槽函数;进行子窗口与show_single信号的连接-->执行信号槽函数,就是在子窗口的按钮按下时,发送了show_single信号然后父窗口接收到了该信号执行了信号槽函数。

补充:若信号函数是有参数的,那么接收到这个信号的槽函数是可以收到这个参数的。

6.现象展示:

互相点击会消失一个窗口,点击子窗口会打印数字10。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值