深入介绍信号和槽

一、槽函数的基础概念

槽函数可以和信号绑定在一起,在这种情况下,每当发射这个信号的时候,就会自动调用这个槽。

槽函数本质上和普通的C++ 成员几乎是一样的-———可以是虚函数、可以被重载、可以是公有的、保护的或者是私有的,并且可以被其他C++成员函数直接调用;还有他们的参数可以是任意类型的。

二、信号

信号:来自 QML 对象的通知,就是字面意思。

 

三、连接connect

连接信号和槽的语句

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

这里的sender和receiver 是指向QObject的指针,signal和slot是不带参数的函数名。实际上,SIGNAL()宏和SLOT()宏会把他们的参数转换成相应的字符串。

sender :信号的发出者

SIGNAL:信号的类型

receiver:信号的接收者

SLOT:信号接收者 接收到信号所执行的动作,即槽函数

connect总结一句话,sender发出SIGNAL,receiver就会执行SLOT。

四、连接方式

1.一个信号可以连接多个槽

eg:connect(slider, SIGNAL(valueChanged(int)),

                      spinBox,SLOT(setValue(int)));

        connect(slider, SIGNAL(valueChanged(int)),

                      this,SLOT(updateStatusBarIndicator(int)));

作者意图很明显,当slider指向的对象发出信号valueChanged(int)后,他想让自己指向的对象和spinBox都响应这个信号,然后执行槽函数。不过需要注意的的是,在发射这个信号的时候,会议不确定的顺序一个接一个地调用这些槽。

 

2.多个信号可以来连接同一个槽

eg:connect(lcd, SIGNAL(overflow()),

                     this,SLOT(handleMathError(int)));

        connect(lineEdit, SIGNAL(valueChanged()),

                      this,SLOT(handleMathError())

这回简述哈,无论发射上面哪一个信号,都会调用handleMathError()这个槽函数

 

3.一个信号可以和另外一个信号相连

eg:    connect(lineEdit, SIGNAL(textChanged(const QString &)),

                        this, SIGNAL(updateStatusBarIndicator(int));

当第一个信号发出时,第二个信号也会发出。

 

4.连接可以被移除

disconnect(lcd, SIGNAL(overflow()),

                     this,SLOT(handleMathError(int)))

字面意思,删除信号和槽的连接。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值