文章目录
前言
Qt中信号槽机制:信号槽连接的五种类型。
连接类型
1.Qt::AutoConnection
默认连接类型,如果信号接收方与发送方在同一个线程,则使用Qt::DirectConnection,否则使用Qt::QueuedConnection;连接类型在信号发射时决定。
2.Qt::DirectConnection
信号所连接至的槽函数将会被立即执行,并且是在发射信号的线程;倘若槽函数执行的是耗时操作、信号由UI线程发射,则会阻塞Qt的事件循环,UI会进入无响应状态。
3.Qt::QueuedConnection
槽函数将会在接收者的线程被执行,此种连接类型下的信号倘若被多次触发、相应的槽函数会在接收者的线程里被顺次执行相应次数;当使用QueuedConnection时,参数类型必须是Qt基本类型,或者使用qRegisterMetaType() 进行注册了的自定义类型。
4.Qt::BlockingQueuedConnection
和Qt::QueuedConnection类似,区别在于发送信号的线程在槽函数执行完毕之前一直处于阻塞状态;收发双方必须不在同一线程,否则会导致死锁。
5.Qt::UniqueConnection
可以搭配以上所有连接类型使用,一经设置之后,同一信号与同一槽函数的二次连接将会失败。
总结
根据具体情况选择合适的连接类型,界面尽量不执行耗时操作,否则会影响用户体验。