QT信号和槽的实现原理

信号和槽是qt用于对象之间通信的核心机制。其目的类似于当一个动作发生的时候,需要对这个动作做出相应的处理,类似的还有借助于函数指针的回调机制,通过回调函数完成对此动作的操作。但是如果对一个庞杂的系统,这种回调函数的维护是相当的麻烦和危险的,使用太多的回调会导致高耦合的情况,这在实际开发过程中是尽量避免的。QT的信号和槽机制避免了该问题,使用起来非常灵活。

使用信号与槽,首先,类必须直接或间接继承自QObject,在类入口处使用O_OBJECT宏,这是必须的,因为必须是信号槽机制由元对象系统(meta object system)提供。

信号:signals或Q_SIGNALS声明的函数,可以看作是一个请求或者一个动作的标志。如果一个对象在达到一个状态或者需要一个请求等操作的时候,其会触发这个信号。qt实现触发请求,使用emit命令(emit 信号函数)。

信号通常是没有返回值的,项目开发中一般都是void,函数中根据情况声明对应的参数列表,该函数只需要声明。

槽:slots或Q_SLOTS关键字声明,槽函数其实就是一个普通的函数,槽函数里边的参数列表应该跟绑定的信号函数参数列表(参数类型和个数)一致,当然参数个数可以比信号少,多余的信号函数参数被忽略了,注意,参数槽函数参数个数少,但是前面的顺序必须跟信号函数一致。如:

signals:

void signalsTest(int A, int B);

private:

slots:

int slotsTest(int A))ÿ

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值