信号与槽

信号和槽用于对象间的通讯。信号/槽机制是Qt的一个核心特征。Qt的元对象系统是信号和槽实现的基础。

Qt中的元对象系统(Meta-Object System)

由于C++的RTTI机制只能提供有限的类型信息,于是Qt构建了自己的元对象系统(Meta-Object)。使用该系统的基类QObject所创建的派生类对象,可以在运行期获取该对象的类名、父类名、枚举类型以及有哪些成员变量、有哪些成员函数等信息。基于这些信息,Qt实现了强大的信号槽机制。

Blog Image
点击查看Qt官方的元对象系统的详细描述

Qt中信号与槽的使用

在Qt中使用信号与槽,必须使Qt的类继承于QObject或者QObject的子类,且在类中申明Q_OBJECT宏。

  • QObject派生类才可以使用元对象系统特性
  • 在类声明前使用Q_OBJECT()宏来开启元对象功能
  • Blog Image

    信号与槽使用时注意事项。

  • 一个信号可以与多个槽函数相连,参数要保持一致
  • 信号没有返回值,如果要实现带返回值,可以将指针作为参数传入
  • 槽函数的执行方式却决于connect()函数的最后一个参数,在多线程调用时需注意
  • 信号与槽函数连接方式有三种:函数指针方式,槽函数为匿名函数方式,Qt宏方式
  • Blog Image
    Blog Image
    Blog Image
    点击查看Qt信号与槽的详细描述