武汉网站制作公司排名太原做网络推广的公司
信号
信号的本质就是事件
在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()进行信号槽连接的注意事项:
- connect函数相对于做了信号处理动作的注册
- 调用conenct函数的sender对象的信号并没有产生, 因此receiver对象的method也不会被调用
- method槽函数本质是一个回调函数, 调用的时机是信号产生之后, 调用是Qt框架来执行的
- connect中的sender和recever两个指针必须被实例化了, 否则conenct不会成功