信号和槽机制

信号和槽的定义

QT编程提供了一种信号和槽的机制

信号:类似于成员函数、成员变量一样的东西

槽:本质就是C++成员函数

信号和槽都需要定义在类中,信号和槽利用connect函数连接起来

例如:connect(信号发出者,发出的信号,信号接收者,做出的反应【槽处理】)

需要注意的是:

1.发出的信号与槽处理参数都是函数的地址,函数的地址要带上作用域

2.信号和槽都可以发生重载,重载后的函数地址要利用函数指针的技术明确出来

3.信号只需要声明,不需要实现;但是槽函数需要声明和实现

4.信号源发出信号需要自定义触发函数,关键字是 emit

5.可以使用disconnect函数断开信号和槽之间的连接

部分代码示例:

//实例化出来两个对象--将其挂靠在窗口上,不用想着释放内存了
    m_teacher=new teacher(this);
    m_student=new student(this);
    //将信号和槽连接起来
    //connect(m_teacher,&teacher::hungry,m_student,&student::treat);
    //如果要触发事件,还需要有自触发关键字
    //触发信号

    //学习---信号和槽的重载版本---要利用函数指针的技术---明确指向函数地址
    //当使用重载版本以后,原来的函数地址的指向就不明确,需要用函数指针的技术来明确其地址
    void (teacher:: * teachersignal)(QString foodName)=&teacher::hungry;   //definition:定义,清晰  redeclaration:声明、表白
    void (student:: * studentslot)(QString foodName)=&student::treat;
    connect(m_teacher,teachersignal,m_student,studentslot);  //使用未声明的XX--有可能是标点符号的问题
    //触发信号
    //信号和槽可以断开连接
    disconnect(m_teacher,teachersignal,m_student,studentslot);
    isover();

信号和槽的扩展

1.信号可以连接信号

connect(信号源1,发出的信号,信号源2,发出的信号)

    void (teacher:: * teachersignal)(void)=&teacher::hungry;   //definition:定义,清晰  redeclaration:声明、表白
    void (student:: * studentslot)(void)=&student::treat;
    connect(m_teacher,teachersignal,m_student,studentslot);
    connect(button,&mybutton::clicked,m_teacher,teachersignal);

当第一个信号源发出信号的时候,第二个信号源也发出信号,第二个的信号接收者也作出反应

这是一个完整的流程,很是不错

2.一个信号可以连接多个槽函数

写法就是正常的写法

3.多个信号可以连接同一个槽函数

与2基本类似

4.信号和槽的参数类型要一一对应,但是信号的参数个数可以多于槽函数的参数个数

意思就是-->信号和槽的参数类型要一致,但不能理解为什么

5.信号和槽可以断开连接

disconnect即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hskwcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值