【学习笔记】C++ GUI Qt4 第二章 2.2 深入介绍信号和槽

本文详细介绍了Qt4中信号和槽的概念,强调它们作为C++成员函数的特性,如可虚拟、可重载,并讨论了它们在对象间的通信角色。通过`connect`函数实现信号与槽的连接,展示了信号触发时自动调用槽函数的机制。

2.2 深入介绍信号和槽

槽和普通的C++成员函数几乎是一样的一一可以是虚函数;可以被重载;可以是公有的、保护的或者私有的,并且也可以被其他C++成员函数直接调用;还有,它们的参数可以是任意类型。唯一的不同是:槽还可以和信号连接在一起,在这种情况下,每当发射这个信号的时候,就会自动调用这个槽。

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

这里的sender发送者和receiver接收者是指向QObject的指针, signal信号和slot槽是不带参数的函数名,实际上,SIGNAL()宏和SLOT()宏会把它们的参数转换成相应的字符串

//1、一个信号可以连接多个槽
connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));
connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));
//在发射这个信号时,会以不确定的顺序一个接一个地调用这些槽。
//2、多个信号可以连接同一个槽
connect(lcd,SIGNAL(overflow),this,SLOT(handleMathError()));
connect(calculator,SIGNAL(divisionByZero()),this,SLOT(handleMathError));
//无论发射的是哪一个信号,都会调用这个槽
//3、一个信号可以与另一个信号相连接
connect(lineEdit,SIGNAL(textChanged(const QString&)),this,SIGNAL(updateRecord(const QString &)));
//当发射第一个信号时,也会发射第二个信号
//4、连接可以被移除
disconnect(lcd,SIGNAL(overflow),this,SLOT(handleMathError));
//这种情况较少用到,一般删除对象时,Qt会自动移除和这个对象相关的所有连接
//5、信号和槽的连接需要它们的参数必须具有相同的顺序和相同的类型
connect(ftp,SIGNAL(rawCommandReply(int,const QString &)),this,SLOT(processReply(int,const QString &)));
//6、如果信号的参数比连接的槽的参数多,那么多余的参数将会被简单地忽略掉
connect(ftp,SIGNAL(rawCommandReply(int, const QString &)),this,SLOT(checkErrorCode(int)));
//如果参数类型不匹配,或者如果信号或槽不存在,或者信号和槽的名字中包含了参数名,则会在运行时发生警告。
//信号和槽的机制适用于任何QObject的子类中,如果没有继承于QObject的类则不能使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值