宏: SIGNAL, SLOT
关键字: signals, slots, emit
- SLOT 方法是阻塞的
- 类的定义中需要包含宏Q_OBJECT
- 要想一个方法放入 SLOT(XXX) , xxx 一定要在声明时指定 signals 修饰;
使用:
QObject::connect(sender, SIGNAL(signal), receiver, SLOT(slot));
绑定的 signal 和 slot 方法参数要类型一致;或自动把signal比slot多出的参数省略;
disconnect 断开
自定义信号/槽
注意点
- 自定义类继承 QObject
- 声明宏 Q_OBJECT
- 函数指针不能作为信号或槽的参数。
- 信号与槽不能有缺省参数。
signals 的注意点
- 表示信号
- signals 修饰的方法不能写实现, 只有声明, 实现由moc自动生成;
- 不可以被 public、private和protected等限定符修饰;
- signals 函数信号只能由该类和其子类 emit(发射) ;
- 信号回调槽是阻塞的
slots 注意点
- 槽, 接收信号后回调的方法
- 可以被 public、private和protected等限定符修饰;
- 多个槽绑定了同一个信号, 他们的回调顺序是随机的;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class sil:public QObject { Q_OBJECT public: int index=0; bool isblan; sil() { index=1; } int get(){ return index; } //定义槽 public slots: void setBool(bool ib){ this->isblan=ib; qDebug("setBool"); emit boolChange();//发射信号 } //定义信号 signals: void set(int index); void boolChange(); }; #endif // SIL_H |
0 Comments