首页 > 其他分享 >Qt 信号槽管理方式

Qt 信号槽管理方式

时间:2023-08-22 11:34:00浏览次数:45  
标签:调用 Qt 方式 QueuedConnection 线程 信号 函数

连接信号槽 connect 函数的第五个参数

ConnectionType 是一个定义在 Qt namespace 中的一个枚举,具体内容如下:

enum ConnectionType {
	AutoConnection,
	DirectConnection,
	QueuedConnection,
	BlockingQueuedConnection,
	UniqueConnection =  0x80
};

Qt::AutoConnection:
默认值。根据 sender 和 receiver 所处线程在信号发出时作出判断。如果在同一线程则使用 Qt::DirectConnection 连接,否则使用 Qt :: QueuedConnection 连接。需要注意的是,这个判断和 sender 对象所处线程无关,真正判断的是发出信号这个动作所在的线程

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

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

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

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

标签:调用,Qt,方式,QueuedConnection,线程,信号,函数
From: https://www.cnblogs.com/ultramanX/p/17648109.html

相关文章

  • Qt 多线程简单应用
    声明:QThread*thread;初始化:thread=newQThread();thread->start();将对象放到线程中去:moveToThread(thread);readTimer.moveToThread(thread);readTimer.setSingleShot(true);连接消亡信号:connect(thread,SIGNAL(finished()),this,SLOT(thread_done()));注......
  • 【java】[sql]使用Java程序向MySql数据库插入一千万条记录,各种方式的比较,最后发现inse
    转:https://www.cnblogs.com/heyang78/p/11666743.html我的数据库环境是mysqlVer14.14Distrib5.6.45,forLinux(x86_64)usingEditLinewrapper这个数据库是安装在T440p的虚拟机上的,操作系统为CentOs6.5.我的数据表是这样的:CREATETABLE`emp`(`Id`int(11)NOTNU......
  • QT资源文件的使用
    QT资源文件的使用将资源打包进工程中,方便使用按步实操建立好工程,在工程名下右键菜单AddNew... 选择QT->QtResourceFile输入资源名称按提示一步步操作到完成在工程中就可以看到Resources资源文件夹,这里有我们刚添加myres资源文件了,这里我们可以先在到工程目录下建一个images,......
  • qt 配置过程记录
    1. source命令用于执行被修改的配置文件,使最新配置更新到操作系统 通常有如下命令source~/.profilesource~/.bash_profilesource/etc/profile如果碰到sudo:source:commandnotfound问题,主要是因为系统中的很多命令需要声明式配置,才能在终端调用这些命令。解决方法:su......
  • t113-c-线程、锁、信号
    线程:这个之前的文章已经记录过了线程之间的通信(同步)https://blog.csdn.net/weixin_56187542/article/details/126251049锁:c的锁同样是pthread头文件里面的https://blog.csdn.net/shaosunrise/article/details/107620885创建线程和加锁:信号这个是用来通知线程该工作了,不......
  • Qt编写网易云界面 (2) -----搜索栏及播放控件
    今天主要实现网易云界面的下面一行播放器内容,并且完善了搜索框功能,效果如图:播放音乐用的是Qt原身的内置播放,如果以后学了FFmpeg,可以回来重构一下这部分代码,搜索框等也是写死了的,后期可以换成从服务器上查询,当然目前这个项目大多部分都是写死的,只是为了快速熟悉一下Qt开发。主页......
  • IDEA-idea_pycharm等关闭双击shitf和双击ctrl的快捷方式
    IDEA-idea_pycharm等关闭双击shitf和双击ctrl的快捷键解决方法很简单全局搜索,搜索double,或者直接进入Settings>AdvancedSettingsAndroidStudio的话可以点这里:把箭头所示的复选框勾上,然后点击“ok”进行保存。这样就不会和Listary软件默认的快捷键冲突了。......
  • EF的三种加载方式
    一、三种加载方式   延迟加载【LazyLoading】、饥饿加载【EagerLoading】、显式加载【ExplicitLoading】二、区别     2.1、延迟加载:        说明:和淘宝商品列表一样,下拉刷新,按需加载。        特点:关闭延迟加载后,查询主表......
  • Linux下MySql的三种安装方式:RPM 二进制包和源代码
    mysql的三种安装方式:RPM二进制包和源代码本次安装的系统平台为redhat5一、使用RPM包进行安装    首先可以从安装光盘中或者到mysql的网站上下载对应版本的rpm包如下:MySQL-server-community-5.1.38-0.rhel5.i386.rpmMySQL-client-community-5.1.38-0.rhel5.i386.rpm   ......
  • Unity 资源加载的两种方式:Resources和AssetBundle最详细的解析(转)
    https://blog.csdn.net/xinzhilinger/article/details/115408934前言:在游戏开发学习初期,游戏体量较小,如果游戏场景需要Asset中的资源,我们可能会通过拖动的方式,将其添加到游戏场景中。而到了实际工作中,会发现再这样做就会使得各种拖动的资源非常复杂,难以查找与维护关于资源:在......