
Qt 信号槽及connect第五个参数简介
发布日期:2021-05-04 03:07:37
浏览次数:21
分类:原创文章
本文共 1344 字,大约阅读时间需要 4 分钟。
1.最后一个参数简介
- Qt::AutoConnection:信号的发送者与信号的接收者在同一线程,则默认使用Qt::DirectConnection;如果不在同一线程,则默认 使用Qt::QueuedConnection。
- Qt::DirectConnection:信号的发送者与信号的接收者在同一线程中执行,当发出信号后,会马上进入槽函数,看上去就像在信号 发送位置调用了槽函数,在多线程下会比较危险,容易造成崩溃。
- Qt::QueuedConnection:信号的发送者与信号的接收者不在同一线程中执行,槽函数运行于信号的接收者线程,当发送信号后, 槽函数不会马上被调用,等待信号的接收者把当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。
- Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。
- Qt::UniqueConnection:可以通过按位或(|)与以上四个结合在一起使用。当设置此参数时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。
2.信号-槽的连接方式
1)、connect(this,SIGNAL(),this,SLOT());
例:connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(onClicked()));
2)、connect(this,&this::signal,this,&this::slot);
例:connect(ui.pushButton,&QPushButton::clicked,this,&Widget::onClicked);
3.信号-槽的使用
1)、信号可以连接信号。
2)、信号可以连接槽,一个信号可以连接多个槽,槽的调用顺序是不确定的。
3)、多个信号可以连接同一个槽。
4)、信号与槽都可以被重载、重载后使用6中的第一种方式连接要好一些,因为第一种连接方式能带上参数。
4.断开信号-槽
disconnect(this,SIGNAL(),this,SLOT());
disconnect(this,&this::signal,this,&this::slot);
5.使用信号-槽要求
1)、继承自QObject类,必须声明Q_OBJECT宏
2)、声明信号signals、Q_SIGNALS,一般信号都为void型,没有private、public、protected区分。
例:void sigSendData();
发射信号:emit sigSendData()、或者Q_EMIT sigSendData();
3)、声明槽slots、Q_SLOTS,槽有private、public、protected区分,槽相当于成员函数,可以直接调用
槽可以重载(因为他相当于成员函数)。
6.注意事项
1)、宏定义不能放在信号-槽中。
2)、构造函数不能声明在信号-槽中。
3)、函数指针不能作为信号-槽参数。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月30日 20时54分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
react(10)——三大属性state,props,refs,总结其特点
2019-03-04
mybatis(11)——在mybatis中配置并使用log4j日志
2019-03-04
Java 对象流
2019-03-04
信息时代的安全威胁
2019-03-04
7-39 魔法优惠券
2019-03-04
南京晓庄学院-数据库系统概论期末复习习题册(1)数据库系统概述
2019-03-04
南京晓庄学院-数据库系统概论期末复习习题册(4)数据库安全性
2019-03-04
fufu学前端之H5+Javascript
2019-03-04
web学习(三)
2019-03-04
Mybatis进阶
2019-03-04
对用户ID、组ID、附属组ID、有效、实际、设置用户、设置组ID等的理解
2019-03-04
协议分层
2019-03-04
利用JavaCV实现将视频以帧方式抽取
2019-03-04
ListView 与 RecyclerView 简单对比
2019-03-04
Marvell 98DX51xx / 98DX81xx 系列交换芯片 内部初始化
2019-03-04
初次使用 Supervisor 管理 Laravel 队列进程
2019-03-04
线程的退出
2019-03-04
2-MySQL性能性能优化实战
2019-03-04
M - 简单字符串排序
2019-03-04
SQL case when写法
2019-03-04