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();

 

posted on 2020-09-25 11:24  大王背我来巡山®  阅读(24)  评论(0)    收藏  举报