QT信号槽connect函数详解(连接方式)

更新时间:2023-06-14 03:08:40 阅读: 评论:0

QT信号槽connect函数详解(连接⽅式)
槽函数和普通的c++成员函数没有很⼤的区别,它们也可以是virtual的;可以被重写;可以使public、protected或者private的;可以被其他c++函数调⽤;参数可以是任何类型。
bool QObject::disconnect ( const QObject * nder, const QMetaMethod & signal, const QObject * receiver, const QMetaMethod & method ) [static]
huayu
这种情况并不经常出现,因为当⼀个对象delete之后,Qt⾃动取消所有连接到这个对象上⾯的槽。
connect(nder,SIGNAL(signal),receiver,SLOT(slot),Qt::DirectConnection);
Qt::DirectConnection参数    参数含义
abab式词
Qt::AutoConnection    默认值,使⽤这个值则连接类型会在信号发送时决定。如果接收者和发送者在同⼀个线程,则⾃动使⽤
Qt::DirectConnection类型。如果接收者和发送者不在⼀个线程,则⾃动使⽤Qt::QueuedConnection类型。
Qt::DirectConnection    槽函数会在信号发送的时候直接被调⽤,槽函数运⾏于信号发送者所在线程。效果看上去就像是直接在信号发送位置调⽤了槽函数。这个在多线程环境下⽐较危险,可能会造成奔溃。
Qt::QueuedConnection    槽函数在控制回到接收者所在线程的事件循环时被调⽤,槽函数运⾏于信号接收者所在线程。发送信号之后,槽函数不会⽴刻被调⽤,等到接收者的当前函数执⾏完,进⼊事件循环之后,槽函数才会被调⽤。多线程环境下⼀般⽤这个。
模糊综合评价
Qt::BlockingQueuedConnection    槽函数的调⽤时机与Qt::QueuedConnection⼀致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运⾏完。接收者和发送者绝对不能在⼀个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。
Qt::UniqueConnection    这个flag可以通过按位或(|)与以上四个结合在⼀起使⽤。当这个flag设置时,当某个信号和槽已经连接时,再进⾏重复的连接就会失败。也就是避免了重复连接。
nder和receiver是QObject对象指针,函数⾥⾯我们⽤到了Qt提供的两个宏SIGNAL()和SLOT();这是Qt要求的,要关联信号和槽必须借助于这两个宏,两个宏的定义如下:
#define SLOT(name) "1"#name
纸影戏#define SIGNAL(name) "2"#name
花椒作用通过这两个宏,就可以把我们传递进去的槽和信号的名字转化成字符串,并在这两个字符串前⾯加上附加的字符。
⼀个信号可以和多个槽相连(槽会⼀个接⼀个地被调⽤,但是调⽤的顺序是不确定的);
心累了
多个信号可以连接⼀个槽(只要任意⼀个信号产⽣,这个槽就回被调⽤);
⼀个信号可以连接到另⼀个信号(当第⼀个信号发送时,第⼆个信号则⽴刻发送);
QObject::connect(firstButton, SIGNAL(clicked()), condButton, SIGNAL(clicked()));
信号的参数类型可以与槽的参数类型对应,信号的参数可以⽐槽的参数多,但不可以少,否则连接将失败
断开连接的⽅法:
disconnect(nder,SIGNAL(signal),receiver,SLOT(slot),Qt::DirectConnection);
该⽅法虽然不是必须使⽤的,因为当⼀个对象delete之后,Qt⾃动取消所有连接到这个对象上⾯的槽。
充满活力的岁月生日祝贺词但是在项⽬开发中,在画⾯上绑定信号的时候,通常会主动解除绑定,在画⾯的哪个⽣命周期绑定信号则在其对称的⽣命周期中解除绑定(例如在onActive中绑定,则在onDeactive中解绑。),这么做的⽬的⼀个我为了代码规范,另⼀个如果该对象距离⾃动销毁这段时间⾥边可能会收到信号。

本文发布于:2023-06-14 03:08:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1037472.html

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

标签:信号   函数   线程   连接   接收者   发送
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图