Qt的signal/slot的4种连接方式

Qt::ConnectionType:Qt不同类型connect的详细区别说明与应用 ConnectionType一、介绍1.Qt::AutoConnection2.Qt::DirectConnection3.Qt::QueuedConnection4.Qt::BlockingQueuedConnection5.Qt::UniqueConnection二、场景三、测试1.声明2.实现3.输出四、结论 一、介绍 1.Qt::AutoConnection 默认连接类型,如果信号接收方与发送方在同一个线程,则使用Qt::DirectConnection,否则使用Qt::QueuedConnect 阅读详情

 

signal/slot在底层会使用三种方式传递消息。参见QObject::connect()方法:
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoCompatConnection )


最后一个参数是就是传递消息的方式了,有四个取值:

Qt::DirectConnection
When emitted, the signal is immediately delivered to the slot.
假设当前有4个slot连接到QPushButton::clicked(bool),当按钮被按下时,QT就把这4个slot按连接的时间顺序调用一遍。显然这种方式不能跨线程(传递消息)。

Qt::QueuedConnection
When emitted, the signal is queued until the event loop is able to deliver it to the slot.
假设当前有4个slot连接到QPushButton::clicked(bool),当按钮被按下时,QT就把这个signal包装成一个 QEvent,放到消息队列里。QApplication::exec()或者线程的QThread::exec()会从消息队列里取消息,然后调用 signal关联的几个slot。这种方式既可以在线程内传递消息,也可以跨线程传递消息。

Qt::BlockingQueuedConnection
Same as QueuedConnection, except that the current thread blocks until the slot has been delivered. This connection type should only be used for receivers in a different thread. Note that misuse of this type can lead to dead locks in your application.
与Qt::QueuedConnection类似,但是会阻塞等到关联的slot都被执行。这里出现了阻塞这个词,说明它是专门用来多线程间传递消息的。

Qt::AutoConnection
If the signal is emitted from the thread in which the receiving object lives, the slot is invoked directly, as with Qt::DirectConnection; otherwise the signal is queued, as with Qt::QueuedConnection.
这种连接类型根据signal和slot是否在同一个线程里自动选择Qt::DirectConnection或Qt::QueuedConnection

这样看来,第一种类型的效率肯定比第二种高,毕竟第二种方式需要将消息存储到队列,而且可能会涉及到大对象的复制(考虑sig_produced(BigObject bo),bo需要复制到队列里)。


与wxWidget、MFC的效率比较
wxWidget没用过,了解过MFC。我觉得MFC的消息队列是比较简单的,一般只是传递long数值、HANDLE、指针,效率上应该会比QT的队列方式高,然而QT的灵活性是MFC没办法比拟的,我还是比较喜欢QT这样的。

 

QT信号与槽机制 Signal & Slot | Connect 信号与槽机制原理 函数connect() 阅读详情

相关推荐

Qt的signal/slot机制的原理和使用

使用过qt的人都知道,signal/slot是Qt对象以及其派生类对象之间的一种高效通信接口,它是Qt的核心特性,也是区别与其他工具包的重要地方。它完全独立于标准的C/C++语言,因此用正确的处理好信号和槽,必须借助于一个成为moc(Meta Object Compiler)的qt工具,该工具是一个C++预处理程序,能为高层次的事件处理自动生成所需要的附加代码。 1.与回调函数的不同:

mawl2002的专栏 9036

Qt::ConnectionType 解析

 signal/slot在底层会使用三种方式传递消息。参见QObject::connect()方法:bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::Au

Alvin-He的专栏 1万+

QT中SIGNAL与SLOT连接的几种方式

signal/slot在底层会使用三种方式传递消息。

J8121的博客 3691

qt, connect参数,Qt::DirectConnection,Qt::QueuedConnection

connect用于连接qt的信号和槽,在qt编程过程中不可或缺。它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。 Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnec

life_is_too_hard的博客 4万+

Qt Connect的第5个参数:Qt::ConnectionType

在main函数中,使用Qt::QueuedConnection作为Qt Connect函数的第五个参数,将Sender类的mySignal信号与Receiver类的mySlot槽函数连接起来。Qt::BlockingQueuedConnection:与Qt::QueuedConnection类似,但是发送信号的线程会被阻塞,直到槽函数执行完毕。Qt::QueuedConnection:当信号发出时,槽函数会被插入到接收对象所属的线程的事件队列中,等待下一次事件循环时执行。

James_CODER的博客 1017

QT信号和槽通信机制的使用技巧

QT中的信号和槽是一种用于实现对象间通信的机制。这种机制通过信号signal和槽slot的连接,实现了一种灵活的事件驱动通信方式。通过使用信号和槽,QT实现了一种低耦合、高内聚的对象通信方式,使得对象之间的交互更加灵活和可维护。 这里介绍一下QT信号和槽通信机制的使用过程中的一些小技巧。

yang1fei2的博客 451

别再只会用connect了!Qt信号槽的5种连接方式保姆级对比(含Lambda表达式避坑指南)

本文深入解析Qt信号槽的五种连接方式,包括Qt4风格的SIGNAL/SLOT宏、Qt5函数指针、UI设计师的转到槽和信号槽编辑器,以及Lambda表达式的高阶应用。特别针对Lambda表达式在信号槽中的使用提供了避坑指南和最佳实践,帮助开发者在不同场景下选择最合适的连接方式,提升代码质量和开发效率。

weixin_42524276的博客 406

基于深度学习方法(7种)的高光谱与多光谱图像融合(附代码+3个数据集获取)

其他不懂的可以把代码发给AI哦,让它给你解读。

热爱分享,热爱记录 1298

【QT开发笔记-基础篇】| 第一章 QT入门 | 1.7 如何连接信号槽

(1) 信号槽的多种连接方式 (2) lambda表达式详解

B站-大轮明王讲Qt 4814

别再怕无霍尔BLDC了!手把手教你用反电动势过零检测搞定电机换向(附STM32代码片段)

本文详细介绍了无霍尔传感器BLDC电机的驱动方法,重点讲解反电动势过零检测技术及其在STM32上的实现。通过硬件电路设计、信号调理和软件算法优化,手把手教你完成电机换向控制,并提供实用的调试技巧和代码片段,帮助开发者快速掌握无霍尔BLDC驱动技术。

weixin_42522575的博客 492

Visual SLAM算法笔记

最近在学习SLAM算法,这里作为阅读笔记记录和总结一下。对经典的单目SLAM/VO算法做了摘要和总结,比如Nister VO、MonoSLAM、PTAM、ORB-SLAM、LSD-SLAM、SVO、DSO等,对几个单目和IMU的融合算法也做了简单总结,比如MSCKF、OKVIS、IMU-Preintegration等。

MulinB的技术博客 3万+

上位机知识篇---信号与槽

Qt信号槽机制是对象间通信的核心机制,信号是事件触发的消息(如按钮点击),槽是响应信号的函数。Qt4使用SIGNAL/SLOT宏将函数名转为字符串,存在编译期不检查、类型不安全的问题。Qt5推荐使用函数指针方式(如&QPushButton::clicked),具有编译检查、类型安全和支持Lambda等优势。建议新项目直接采用Qt5方式,SIGNAL/SLOT宏仅用于维护旧代码。

在你不想做的时候,正是应该做的时候。 799

双翌视觉系统配合机械手大视野定位案例(单目标带角度抓取)

一、定位原理概述 1.系统构架 视觉定位系统采用正向打光方式,光源在机械手上方,CCD从上往下拍摄,进行图像分析定位。相机将计算出的像素坐标转换为机械手的物理坐标,视觉软件与机械手进行网口通讯,将视野内物料的物理坐标发送给机械手,机械手抓取物料放在指定工位。 2.相机标定概述 系统采用宫格标定确定像素坐标和物理坐标一一对应关系,同时利用3点或者多点旋转标定求出旋转中心 系统采用宫格标定,自定义行列数和间距及旋转角度,通过机械手发送的当...

weixin_51554164的博客 2172

Qt学习笔记(2)

主要介绍了Qt中的信号与槽,以及子控件的内存优化。

m0_60958852的博客 284

Adversarial Texture for Fooling Person Detectors in the Physical World

本文提出了对抗纹理的想法(AdvTexture),与基本补丁攻击不同对抗纹理可以生成任意大小,可以覆盖任意大小的不了,并且纹理的任何局部都有对抗性的效果。当衣服被对抗纹理覆盖是,摄像头捕捉到的每一个局部区域都可以攻击探测器,这成功解决了片段缺失的问题。提出了一种两阶段生成方法:基于环形收割的可扩展生成攻击(TC-EGA)来制作广告纹理。第一阶段,训练一个全卷积网络FCN作为生成器,通过采样随机潜变量作为输入来产生纹理(不同于GAN中传统的生成器架构,每一层都使用卷积运算)......

weixin_49171105的博客 1067

FPGA 核脉冲梯形成型 Verilog 实现:从 MATLAB 到 50MHz 采样率部署

本文详细解析了FPGA实现核脉冲梯形成型的完整流程,从MATLAB仿真到50MHz采样率的Verilog硬件部署。重点探讨了梯形成型算法对负指数信号的优化处理,包括定点数量化、流水线架构设计及资源优化技巧,为核辐射探测与高能物理实验提供高效解决方案。

weixin_30920513的博客 389

Qt / SIGNAL、SLOT、signals、slots、emit 关键字含义

一、SIGNAL、SLOT 源码路径:/home/(name)/Qt5.14.2/5.14.2/Src/qtbase/src/corelib/kernel/qobjectdefs.h Q_CORE_EXPORT const char *qFlagLocation(const char *method); #ifndef QT_NO_META_MACROS #ifndef QT_NO_DEBUG // Debug #define QLOCATION "\0" __FILE

布袋和尚 3625

大数据在电力行业的应用案例解析-【电力技术】(九)大数据在电力储能运维中的深度应用(含故障预测代码)

大数据技术为电力储能运维提供了“精准化、智能化、高效化”的解决方案,破解了传统运维的核心痛点,实现了储能系统从“被动抢修”到“主动运维”的转型,为新型电力系统建设提供了重要支撑。当前,随着储能产业的快速发展,大数据与储能运维的融合将更加深入,未来将结合人工智能、物联网、区块链等技术,实现储能运维的全流程智能化——从设备故障的提前预警,到寿命的精准预测,再到运维策略的自动优化、调度协同的实时响应,进一步提升储能系统的安全性、经济性与可靠性。

getusushu的博客 88

闫刚 QT多线程signal和slot连接方式原理

介绍Qt中的signal和slot连接方式,同时介绍他们在多线程中的使用 直接连接Qt::DirectConnection 队列连接Qt::QueuedConnection 自动连接Qt::AutoConnection 直接连接 Widget.cpp源代码内容 namespace Ui { class Widget; } class Widget : public QWidget { ...

yangang185的博客 1468

创新引入HAttention模块:提升YOLOv8小目标检测精度【YOLOv8】

YOLOv8在前几个版本的基础上进行了多项优化,特别是在模型的速度和精度上做了较大改进。改进的backbone:引入了更加高效的骨干网络(backbone)设计,如更深的网络层和更高效的特征提取模块。增强的Neck模块:使用了PANet等机制来更好地融合不同尺度的特征,增强了多尺度目标检测能力。增强的Head模块:包括多头检测头,以便针对不同大小的目标进行更精细的预测。尽管如此,YOLOv8仍面临着在小目标检测精度上不如大型目标的挑战,尤其在复杂背景或高密度目标环境下。

博客 2769

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深入理解QT的SIGNAL\SLOT机制(一):SIGNAL\SLOT如何使用

首先声明不同版本的QT针对信号和槽的实现略有不同,接口大多一样。我用的是QT5.9.1。QT的SIGNAL/SLOT有点像观察者模式,说是阶段一直做SDN,在controller的代码中就是使用观察者模式进行消息分发,看了Qt的SIGNAL/SLOT才发现这也是一种观察者模式。第一章先来看SIGNAL/SLOT如何简单实用新建工程,该工程里面就两个类,一个是MyWidget,继承自QWidget,一

huliweiweiba的博客 8496

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

QT不同线程间signal-slot机制的值传递

QT不同线程间signal-slot机制的值传递 signal-slot机制是QT核心,也是QT解决线程之间通信的一大亮点。深刻理解其两大特性: (1)loosely coupled sender与receiver互不关心,一个signal可以被多个slot获取,signal可以触发另一个signal。 (2)type-safe connect连接时,遵守严格的参数约定,slot参数必须...

《好好先生》专栏 1457

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Qt中的SIGNAL和SLOT

信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。 槽和普通的c++成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的 (protective),也可是私有的(private),它们可以象任何c++成员函数一样被调用,可以传递任何类型的参数。不同

king16304的博客 853

Java实现Qt的SIGNAL-SLOT机制

SIGNAL-SLOT是Qt的一大特色,使用起来十分方便。在传统的AWT和Swing编程中,我们都是为要在 监听的对象上添加Listener监听器。被监听对象中保存有Listener的列表,当相关事件发生时,被监听 对象会通知所有Listener。而在Qt中,我们只需通过connect方法连接两个对象上的方法就可以了,非常 方便、优雅地实现了传统的观察者Observer模式。

西代零零发 5234

QT ---- Signal & Slot(信号与槽)

Signal & Slot 使用信号与槽的类中,需要在类的定义(.h文件)中加入#include <QObject> Signal:在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号, Slot:对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private ...

慧子 1万+
上一篇: vs2005 快捷键
下一篇: Qt中事件处理的顺序
robertkun
博客等级 码龄19年 252粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值