【QT】跨线程的信号槽(connect函数)

更新时间:2023-06-30 10:07:51 阅读: 评论:0

【QT】跨线程的信号槽(connect函数)
switzerland是什么意思>loface
线程的信号槽机制需要开启线程的事件循环机制,即调⽤QThread::exec()函数开启线程的事件循环。
Qt信号-槽连接函数原型如下:
无语的英文bool QObject::connect ( const QObject * nder, const char * signal, const QObject * receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection ) Qt⽀持5种连接⽅式
宇宙探秘
Qt::DirectConnection(直连⽅式)(信号与槽函数关系类似于函数调⽤,同步执⾏)
当信号发出后,相应的槽函数将⽴即被调⽤。emit语句后的代码将在所有槽函数执⾏完毕后被执⾏。当信号发射时,槽函数将直接被调⽤。⽆论槽函数所属对象在哪个线程,槽函数都在发射信号的线程内执⾏。
leaves是什么意思Qt::QueuedConnection(队列⽅式)(此时信号被塞到事件队列⾥,信号与槽函数关系类似于消息通信,异步执⾏)
小王子英文读后感
当信号发出后,排队到信号队列中,需等到接收对象所属线程的事件循环取得控制权时才取得该信号,调⽤相应的槽函数。emit语句后的代码将在发出信号后⽴即被执⾏,⽆需等待槽函数执⾏完毕。当控制权回到接收者所依附线程的事件循环时,槽函数被调⽤。槽函数在接收者所依附线程执⾏。
Qt::AutoConnection(⾃动⽅式)
Qt的默认连接⽅式,如果信号的发出和接收信号的对象同属⼀个线程,那个⼯作⽅式与直连⽅式相同;否则⼯作⽅式与队列⽅式相同。如果信号在接收者所依附的线程内发射,则等同于直接连接如果发射信号的线程和接受者所依附的线程不同,则等同于队列连接
statistic
nianticQt::BlockingQueuedConnection(信号和槽必须在不同的线程中,否则就产⽣死锁)
attitudes
槽函数的调⽤情形和Queued Connection相同,不同的是当前的线程会阻塞住,直到槽函数返回。
Qt::UniqueConnection
thin是什么意思与默认⼯作⽅式相同,只是不能重复连接相同的信号和槽,因为如果重复连接就会导致⼀个信号发出,对应槽函数就会执⾏多次。
如果没有特殊的要求我们connect函数选择默认的连接⽅式就好,也就是connect的第五个参数不填写就ok,例如:
connect(m_obj, &QObject::destroyed, this, &MainWindow::SetPtrNullptr);

本文发布于:2023-06-30 10:07:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/162479.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   信号   线程   连接   事件   依附
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图