connect用于连接qt的信号和槽,在qt编程过程中不可或缺。它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。

Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。

Qt::DirectConnection:槽函数会在信号发送的时候直接被调用,槽函数运行于信号发送者所在线程。效果看上去就像是直接在信号发送位置调用了槽函数。这个在多线程环境下比较危险,可能会造成奔溃。

Qt::QueuedConnection:槽函数在控制回到接收者所在线程的事件循环时被调用,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。

Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。

Qt::UniqueConnection:这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。

参考:https://blog.csdn.net/life_is_too_hard/article/details/52089723

https://blog.csdn.net/theSaltiestFish/article/details/79969411

QT信号槽第五个参数相关推荐

  1. Qt面试题(一)Qt信号槽第五个参数

    connect()第五个参数的作用,指定连接方式:默认,队列,直接     多线程时才有意义     默认的时候     如果是多线程,默认使用队列     如果是单线程, 默认使用直接方式     ...

  2. Qt信号槽如何传递参数

    Qt信号槽如何传递参数 利用Qt进行程序开发时,有时需要信号-槽来完成参数传递.带参数的信号-槽在使用时,有几点需要注意的地方,下面结合实例进行介绍. 1. 当信号与槽函数的参数数量相同时,它们参数类 ...

  3. Hello Qt——Qt信号槽机制源码解析

    基于Qt4.8.6版本 一.信号槽机制的原理 1.信号槽简介 信号槽是观察者模式的一种实现,特性如下: A.一个信号就是一个能够被观察的事件,或者至少是事件已经发生的一种通知: B.一个槽就是一个观察 ...

  4. Qt信号槽机制-传递自定义数据类型(qRegisterMetaType)

    Qt信号槽机制-传递自定义数据类型qRegisterMetaType 前言 前言 通过Qt内置的数据类型进行信号与槽参数传递很方便:如果是自己定义的类型如果想使用signal/slot来传递的话,则没 ...

  5. Qt信号槽中connect五个重载函数详细说明,连接类型Qt::DirectConnection,Qt::QueuedConnection,附详细代码

    想说在前面的两句话. 信号槽是 Qt 框架引以为豪的机制之一.熟练使用和理解信号槽,能够设计出解耦的非常漂亮的程序,有利于增强我们的程序设计能力. 信号与槽是Qt学习的重点,但不是难点. 本篇介绍Qt ...

  6. QT信号槽的5种连接方式

    在面试中,这是一个经常被问到的问题点,也是刚刚上qt的工程师不会去注意的一个点. qt源代码定义的连接方式如下: 1.Qt::AutoConnection 一般信号槽不会写第五个参数,其实使用的默认值 ...

  7. 【Qt开发经验】Qt信号槽连接不成功问题原因汇总

    以下几种情况会导致信号槽连接不成功,下面分别描述. 1. 拥有信号槽的类,必须继承QObject,声明Q_OBJECT宏. Qt帮助手册里搜索 "Signals & Slots&qu ...

  8. Qt 信号槽 signals slots 特点 限定符的区别

    1. 信号槽应用于对象间通信. 2. 信号槽的处理借助于moc(Meta Object Compiler)工具,Q_OBJECT宏通知compiler使用moc工具进行moc扩展. 3. 对象中的信号 ...

  9. Qt 信号槽的应用(三)

    传递自定义结构体 在项目开发过程中,不可能只用基本类型或一些Qt对象来作为信号槽的参数,结构体是必不可少的.由于结构体无法被信号槽识别,需要用Q_DECLARE_METATYPE来注册结构体. 以下继 ...

最新文章

  1. ICLR 2019最佳论文揭晓!NLP深度学习、神经网络压缩夺魁 | 技术头条
  2. JavaScript常见面试题和答案
  3. Python实现自动推本地github博客到远程仓库
  4. 深度学习图像融合_基于深度学习的图像超分辨率最新进展与趋势【附PDF】
  5. Flash与.NET的通信(三):LoadVars对象的应用
  6. openeim 成片的蝴蝶兰盛开在绿树之间
  7. MySql-Mysql技术内幕~SQL编程学习笔记(1)
  8. Java Web GenericServlet
  9. JavaScript入门基础知识总结
  10. 软件开发学习的5大技巧,你知道吗?
  11. 手机电视机屏幕分辨率
  12. Labview2018视频教程(共51节)
  13. uboot 引导linux内核 参数mem=size,Uncompressing Linux..... done, booting the kernel.
  14. 【转】Windows Linux MacOS操作系统的区别
  15. Nginx 配置实现请求转发功能
  16. 计算机报名初始密码,计算机报名密码忘了怎嘛办
  17. MySQL之账号管理、建库以及四大引擎
  18. JavaScript基础知识学习与刷题
  19. Slog41_支配vue框架初阶项目之博客网站-单页-登陆成功页面的布局和定位
  20. Brave浏览器保护用户隐私第2招:第三方页面垃圾过滤

热门文章

  1. 沈阳地铁线程规划图(地铁1号 -- 地铁5号)
  2. 专有网络VPC (产品简介,使用限制)
  3. 线性代数学习笔记——第七十六讲——矩阵的合同
  4. Plone学习笔记 ( by quqi99 )
  5. Oracle 修改表存储空间
  6. 小米平板2刷哪个系统更流畅_小米平板2 Windows版本评测:流畅度不如MIUI 7版 胜在更智能...
  7. C语言 | 结构体成员数组赋值的问题
  8. hbase2.x HBCK Report Region Holes Overlaps问题修复
  9. [原创]看GONZO《最终兵器彼女》的感想
  10. JAVA架构师面试分享—链家网