1. 信号可以连接信号
连接时要求与槽函数一样,参数和返回值需要匹配
示例:
class MyButton: public QPushbutton { public: MyButton(); private: signals: void my_signal(); }; MyButton::MyButton() { connect(this, &MyButton::clicked, this, &MyButton::my_signal); // 将clicked信号连接到自定义信号my_signal }
2. 一个信号可以连接多个槽函数
当触发1个信号时,起作用的槽函数是随机的,而不是顺序执行;
示例
class A { private: A(); signals: void a_signal(); public slots: void slot1(); void slot2(); void slot3(); }; A::A() { connect(this,&A::a_signal, this, &A::slot1); // a_signal信号连接槽函数slot1 connect(this,&A::a_signal, this, &A::slot2); // a_signal信号连接槽函数slot2 connect(this,&A::a_signal, this, &A::slot3); // a_signal信号连接槽函数slot3 }
当信号a_signal发出时,3个槽函数slot1, slot2, slot3会被随机调用。
3. 1个槽函数可以有多个信号连接
多个不同的信号可以连接到同一个槽函数class A
{ public: A(); private: signals: void signal_1(); void signal_2(); void signal_3(); public slots: void fun_slot(); }; A:A() { connect(this, &A::signal_1, this, &A::fun_slot); // 信号signal_1连接到槽fun_slot
connect(this, &A::signal_1, this, &A::fun_slot); // 信号signal_2连接到槽fun_slot connect(this, &A::signal_1, this, &A::fun_slot); // 信号signal_3连接到槽fun_slot } A::fun_slot() { qDebug()<<"slot is acitvate"; }
当不同的信号signal_1, signal_2, signal_3发出时,都能调用槽函数fun_slot();
浙公网安备 33010602011771号