信号和槽(Qt)

        Qt信号和槽机制是一种用于处理事件和通信的重要机制。当一个特定事件发生时,比如用户点击按钮或者数据发生改变,一个对象会发出一个信号,当别的对象接收到这个信号后,执行相应的槽函数。

格式

旧格式

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

        sender:信号的发起者

        signal:发出的信号名

        receiver:信号的接收者

        slot:接收信号被调用的槽函数

        在写slot的时候函数名后需要+()

新格式

        connect(sender, &SenderClass::signal, receiver, &ReceiverClass::slot);

        新格式带来的好处:类型安全,且在编译时进行了静态检查

        sender:信号的发起者

        &SenderClass::signal:发送信号的类的名称+发出的信号名

        receiver:信号的接收者

        &ReceiverClass::slot:接收信号的类的名称+执行的槽函数

        在写slot的时候不需要+()

信号的的定义与发出

定义:

        signals:

                信号函数

发出:emit   信号函数

信号函数

        信号是一种特殊的成员函数,用于在特定事件发生时向连接到该信号的槽函数发出通知。信号并不包含实际的实现代码,而只是用于通知其他对象或组件发生了某个事件。因此,不需要实现函数体。

        信号函数,可以有返回值,也可以有参数,因此可以重载。

        一个信号可以链接多个槽函数,多个信号也可以链接一个槽函数

断开信号和槽的连接

        关键字:disconnect

断开特定信号和槽的连接

        和连接的写法一致。

        disconnect(sender, &SenderClass::signalName, receiver, &ReceiverClass::slotName);

断开对象的所有信号和槽的连接

        disconnect(sender);

断开特定信号的连接

         disconnect(sender, &SenderClass::signalName);

connect函数的第五个参数

        可选参数,用于指定连接的类型。

Qt::AutoConnection:Qt默认的连接方式,信号和槽处于同一线程用该方式。

Qt::DirectConnection:当信号发生时,槽函数会在发送信号的线程中立即被调用。没有线程切换的开销

Qt::QueuedConnection:信号和槽处于不同线程时,事件会被放置到接收者对象的事件队列中,在接收者对象所属的线程中处理。

Qt::BlockingQueuedConnection:在信号发射的线程中,如果当前线程是接收者对象所属的线程,会直接调用槽函数;只有当信号和槽在不同线程中时,才会像 Qt::QueuedConnection 一样将信号放入目标线程的事件队列中等待执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值