Qt:信号和槽总结(1,C++11下的信号和槽 2,第五个参数 3,阻塞 )

2023-11-09

Qt:信号和槽总结(1,C++11下的信号和槽  2,第五个参数  3,阻塞 )

信号和槽是Qt特有的一种通讯方法,具有以下特点:

  1. 信号与槽的连接比较灵活,可以一对一,一对多或者是多对一
  2. 信号与槽的绑定与解除也十分的灵活,使用connect以及disconnect就可以了
  3. 信号和槽可以用来实现线程之间的通信(信号和槽的第五个参数)

目录

常规信号和槽:

C++11下的信号和槽:

信号和槽的第五个参数:

阻塞:


常规信号和槽:

connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

信号和槽的标准形式如上:

//标准信号和槽

//const QObject *sender:信号发出者

//const char *signal:发出信号的名称

//const QObject *receiver:信号接受者

//const char *method:信号接收函数(槽函数)的名称

//Qt::ConnectionType type = Qt::AutoConnection:连接方式,一般默认为自动,不需要输入,Qt会自动判断,属于第五个参数

 举例:

connect(begin,&QPushButton::clicked,this,on_connect_clicked);

begin为信号的发出者,信号为clicked,接受者是connect所在的类,执行内容为 on_connect_clicked


C++11下的信号和槽:

此形式是C++11中更新的内容:

形式如下:

connect(const QObject *sender,const char *signal,
            [=]()
{
        .............
        //相应的数据操作
        ............

}

)

举例:

connect(ui->example,&QAction::triggered,
            [=]()
    {
        
        qDebug()<<"example is triggered";
       

}
)

此方法省去了信号的接受者和接收后的槽函数,显然,信号的接受者为connect所在的类,执行内容为{}中的内容。


信号和槽的第五个参数:

信号和槽可以进行跨线程通讯,一般不需要写第五个参数(第五个参数,connection Type)

因为信号和槽默认第五个参数是Qt::AutoConnection。

connect会自动判断信号发送者接受者槽函数的位置,根据位置来判断使用队列还是直接方式

连接方式具体分为以下几种:

  • 如果是单线程通讯,使用直接方式

Qt::DirectConnection)直接:槽函数和所在线程和发送者一样。

   如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型

  • 如果是多线程之间通讯,使用队列方式

Qt::QueuedConnection)队列:槽函数所在的线程和接受者一样

  一般默认是自动方式,Qt会自动进行判断,如果是多线程,会进行多线程队列的连接方式,如果是单线程,会采用直接的连接 方式


阻塞:

在必要的时候,需要断开信号和槽,此时使用阻塞( disconnect() )即可

其原型如下:

bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
  • 从原型中可以看见,返回值为bool类型
  1. 当成功断开时,返回true
  2. 当断开失败时,返回false

disconnect()有三种使用方法:
1.(一刀切模式)断开所有和myObject对象的信号连接的槽函数

disconnect(myObject, 0, 0, 0);

等价于

myObject->disconnect();


2.断开myObject对象中mySignal()信号与其他槽函数的连接

disconnect(myObject, SIGNAL(mySignal()), 0, 0);

等价于

myObject->disconnect(SIGNAL(mySignal()));


3.断开myObject对象与myReceiver对象间的连接,两个类之间无法进行通讯工作

disconnect(myObject, 0, myReceiver, 0);

等价于

myObject->disconnect(myReceiver);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt:信号和槽总结(1,C++11下的信号和槽 2,第五个参数 3,阻塞 ) 的相关文章

随机推荐

  • 朴素贝叶斯分类器

    贝叶斯分类器 优点 数据较少任然有效 可以处理多类别的问题 缺点 输入数据准备方式比价敏感 数据类型 标称型数据 朴素贝叶斯决策理论 假设有两类数据 A 和 B 假设有两类数据 A和B 假设有两类数据 A和B 平面直角坐标
  • springboot开发环境生产环境配置文件切换

    一 单个文件切换环境里 在application yml配置文件中添加如下信息 server port 8081 spring profiles active prod 激活prod生产环境 server port 8083 spring
  • “物联网+区块链”技术给农业发展带来新机遇

    运用 物联网 区块链 技术 从鸡苗供应 养殖 再到屠宰 流通等环节 每一只肉鸡的信息数据都被如实记录在 身份证 上 且不可篡改 经区块链加密的多宝鱼生长数据 通过 绿色履历 呈现在消费者面前 从土地承包到播种 加工 稻米的相关信息全部在区块
  • 【机器学习实战】5、Logistic 回归

    文章目录 5 1 基于Logistic回归和Sigmoid函数的分类 5 2 基于最优化方法的最佳回归系数确定 5 2 1 梯度上升法 5 3 python实战 5 3 1 查看数据集分布情况 5 3 2 训练 5 3 3 绘制决策边界 5
  • OpenCV相机标定全过程

    一 OpenCV标定的几个常用函数 findChessboardCorners 棋盘格角点检测 bool findChessboardCorners InputArray image Size patternSize OutputArray
  • Go语言在机器学习中有未来吗?

    Go 是一种开源编程语言 最初由 Google 设计 用于优化系统级服务的构建和使用 在大型代码库上轻松工作 以及利用多核联网机器 Go 于 2009 年推出 作为一种静态类型和编译型编程语言 深受 C 语言的影响 注重简单性 安全性和并发
  • ros 源码安装

    版本lunar 系统版本debian 9 8 参考 http wiki ros org lunar Installation Source 1 Installing bootstrap dependencies sudo apt get i
  • Flutter 实现安卓原生系统级悬浮窗

    Flutter实现安卓原生系统级悬浮窗 原创 As Kai 博客地址 https blog csdn net qq 42362997 如果以下内容对您有帮助 点赞点赞点赞 最近碰到了一个需求 使用Flutter实现悬浮窗效果 想来想去只能使
  • 关于 ioctl 的 FIONREAD 参数

    ioctl 是用来设置硬件控制寄存器 或者读取硬件状态寄存器的数值之类的 而read write 是把数据丢入缓冲区 硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区 ioctl keyFd FIONREAD b 得到缓冲区里
  • cmake message显示

    cmake message 在output中显示 PS C mywork mycpp helloworld build gt cmake Configuring done Generating done Build files have b
  • 雅可比算法求矩阵特征值C语言源代码,雅可比(Jacobi)计算特征值和特征向量

    雅可比迭代法法 在图形图像中不少地方用到求矩阵的特征值和特征向量 好比主成分分析 OBB包围盒等 编程时通常都是用数值分析的方法来计算 这里介绍一下雅可比迭代法求解特征值和特征向量 雅可比迭代法的原理 网上资料不少 详细可见参考资料1 这里
  • 【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

    简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下
  • Linux中桥接模式配置IP

    前言 本文主要介绍如何使用桥接模式配置IP 在使用虚拟机进行通信时 经常需要面临三种模式选择 不同模式之间配置不同 系统环境 CentOS 7 两种模式区别 NAT 虚拟机从属于主机 访问外部网络必须通过主机访问 虚拟机的IP只有主机才能识
  • 用DETR进行目标检测的predicat文件

    文章目录 前言 二 使用步骤 1 更改官方detr中308行的类别数 2 根目录加入检测文件 总结 前言 由于最近研究DETR目标检测 但是发现官方给的代码缺少了predict文件 于是自己写了一个 但是写代码的过程中也想到了一些问题 比如
  • QT QPushButton点击事件的实现

    最近需要对按钮实现效果 当鼠标按下时按钮有效果1 然后鼠标松开时按钮有效果2 分析 这里没有现成的信号可以使用 需要重载mousePressEvent 及 mouseReleaseEvent 事件函数 在mouseReleaseEvent
  • 技术笔记

    https docs qq com doc DUVBFRUNvUW1SUXB5
  • js模仿f11全屏_js触发f11全屏

    document on keydown function e var e event window event arguments callee caller arguments 0 if e e keyCode 122 捕捉F11键盘动作
  • 【CSS】css样式控制div水平垂直居中的六种方法

    1 绝对定位方法 不确定当前div的宽度和高度 采用 transform translate 50 50 当前div的父级添加相对定位 position relative 如图所示 代码如下 div background red posit
  • grep、sed、awk、perl等对正则表达式的支持的差别

    以perl的正则为基准 不同的用法以粉红色标出 因为spacemacs支持vim正则表达式操作 而且能够实时显示匹配内容和替换结果 可以作为perl脚本的正则表达式debug手段 转载来自 grep sed awk perl等对正则表达式的
  • Qt:信号和槽总结(1,C++11下的信号和槽 2,第五个参数 3,阻塞 )

    Qt 信号和槽总结 1 C 11下的信号和槽 2 第五个参数 3 阻塞 信号和槽是Qt特有的一种通讯方法 具有以下特点 信号与槽的连接比较灵活 可以一对一 一对多或者是多对一 信号与槽的绑定与解除也十分的灵活 使用connect以及disc