QT中信号和槽本质

信号

信号的本质就是事件

在QT中信号的发出者是某个实例化的类对象,对象内部可以进行相关事件的检测。

槽函数是一类特殊的功能的函数,也可以作为类的普通成员函数来使用

在Qt中槽函数的所有者也是某个类的实例对象

信号和槽的关系

在Qt中我们需要使用QOjbect类中的connect函数进二者的关联。

QMetaObject::Connection QObject::connect(
    	const QObject *sender, PointerToMemberFunction signal, 
        const QObject *receiver, PointerToMemberFunction method, 
		Qt::ConnectionType type = Qt::AutoConnection);
参数:
  - sender:   发出信号的对象
  - signal:   属于sender对象, 信号是一个函数, 这个参数的类型是函数
              指针, 信号函数地址
  - receiver: 信号接收者
  - method:   属于receiver对象, 当检测到sender发出了signal信号, 
              receiver对象调用method方法,信号发出之后的处理动作
 
//  参数 signal 和 method 都是函数地址, 因此简化之后的 connect() 如下:
connect(const QObject *sender, &QObject::signal, 
        const QObject *receiver, &QObject::method);

使用connect()进行信号槽连接的注意事项:

  1. connect函数相对于做了信号处理动作的注册
  2. 调用conenct函数的sender对象的信号并没有产生, 因此receiver对象的method也不会被调用
  3. method槽函数本质是一个回调函数, 调用的时机是信号产生之后, 调用是Qt框架来执行的
  4. connect中的sender和recever两个指针必须被实例化了, 否则conenct不会成功

你可能感兴趣的:(Qt开发,qt,开发语言)