第二章 创建对话框 2.2深入介绍信号和槽

信号和槽机制是QT编程的基础,可以程序员把互不了解的对象绑定在一起。

槽和普通的C++成员函数几乎是一样的,,但唯一的不用是:槽还可以跟信号连接在一起。每当发射信号就会自动调用这个槽。

connect的语句看起来这样的:

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

sender  , receive是指向QObject的指针,signal 和 slot 是不带参数名(书上是参数,我认识说是参数名更确切)的函数名,实际上SIGNL()和SLOT()宏会把它们的参数转化成相应的字符串。

除了一个信号连接一个槽,还可以有其他的可能性

1.一个信号连接多个槽   发射这个信号的时候,以不确定顺序一个接一个调用这些槽

2.多个信号连接同一个槽, 无论哪个信号都可以调用槽

3.一个信号和另外一个信号连接,  发射第一个信号也会发射第二个信号, 它们的连接和信号和槽的连接难以区别

4.连接可以被移除

diconnect   

但这种情况较少用到。因为删除对象的时候QT自动移除和这个对象相关的所有连接



要是信号和槽成功连接,他们的参数必须具有相同的顺序和相同的类型,

一个例外,信号的参数多于槽的参数,多余的参数被忽略

参数类型不匹配,或者信号或者槽不存在,或者信号和槽包含参数名 都会发出警告


我起先没有注意到的一点是·:
槽也可以发射自己的信号。通过关键字 emit 貌似上次漏掉了


另外这种机制不局限于图形用户界面变成,可以用于任何QObject的子类中:

比如下面:

class employee:public QObject{
Q_OBJECT
public:
employ(){mysalary=0;}
public slots:
void setsalary(int newsalary);

signal:
void salarychanged(int newsalary);

private:
int mysalary;
};
void employee::setsalary(int newsalary){
    
    if(newsalary!=mysalary){
        mysalary=newsalary;
        emit salarychanged(mysalary);
    }
    
}
setsalary()槽可发射salarychanged()信号。


下面放一张我们已经用到过的类的关系图



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值