1. 一个信号允许连接多个槽函数
疑问1:当在这种情况下,一个信号发出,槽函数执行的顺序是按连接时的顺序依次执行的。如 信号sig1和槽函数slot1,slot2
connect(btn, SIGNAL(sig1), this, SLOT(slot1()));
connect(btn, SIGNAL(sig1), this, SLOT(slot2()));
那么sig1发出时,先执行槽函数 slot1, 再执行槽函数 slot2
2. 多个信号允许连接同一个槽函数
3. 一个信号允许连接另外一个信号,如
connect(btn, SIGNAL(clicked()), this, SIGNAL(clicked()));
4. 严格的情况下,信号与槽函数的参数个数和类型需要一致,至少信号的参数不能少于槽函数的参数。
5. 在使用信号与槽函数的类中,必须在类的定义中加入宏 Q_OBJECT
6. 当一个信号被发射时,与其关联的槽函数通常被立即执行,只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码
后续:关于以上第6点的说明
7. 当信号发送者和槽函数执行者在一个线程时,是按以上第6点执行的,如果不在一个线程,则信号发出后,立即返回,不论槽函数是否执
行完成。
8. connect函数的第五个参数说明
a: Qt::AutoConnection
b: Qt::DirectConnection
c: Qt::QueuedConnection
d: Qt::BlockingQueuedConnection
e: Qt::UniqueConnection
默认是第一种连接,此时Qt会自动判断信号发送者和槽函数执行者是否在同一个线程,如果相同则按第二种方式执行,否则按第二种方式执行。
第四种和第五种遇到过,不做评述。