信号和槽(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 一样将信号放入目标线程的事件队列中等待执行。

相关推荐

  1. 信号(Qt)

    2024-03-10 11:00:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 11:00:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 11:00:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 11:00:01       82 阅读
  4. Python语言-面向对象

    2024-03-10 11:00:01       91 阅读

热门阅读

  1. 2. gin中间件注意事项、路由拆分与注册技巧

    2024-03-10 11:00:01       34 阅读
  2. 突破编程_C++_设计模式(享元模式)

    2024-03-10 11:00:01       33 阅读
  3. 突破编程_C++_设计模式(策略模式)

    2024-03-10 11:00:01       34 阅读
  4. Android车载应用与手机版Android应用有何不同?

    2024-03-10 11:00:01       49 阅读
  5. visual studio的使用

    2024-03-10 11:00:01       45 阅读