QT信号槽的使用

2023-10-26

QT4:
     QMetaQbject:: Connection QObject:: connect( const QObject* sender, const char* signal
                                                                                const QObject* receiverconst charslot,
                                                                                Qt:: ConnectionType type = Qt:: AutoConnection)
QT5:
      template< typename PointerToMemberFunction>
     QMetaQbject:: Connection QObject:: connect( const QObject* senderPointerToMemberFunction signal
                                                                                const QObject* receiverPointerToMemberFunction  slot,
                                                                                Qt:: ConnectionType type = Qt:: AutoConnection)
示例:
    QT4:connect(sender, SIGNAL(sigTest(int, double)), receiver, SLOT(slotTest(int, double)))
    QT5:connect(sender, &QObject::sigTest, receiver, &QObject::slotTest);
QT5较QT4在使用上,信号和槽不需要指明参数列表,使用第二种连接方式则要求信号或槽不允许存在同名重载函数

【connect连接方式】

type为连接方式,共五种
  • Qt::AutoConnection:自动连接,默认值。如果sender发送信号和receiver位于不同线程,则使用Qt::QueuedConnection;位于同个线程则使用Qt::DirectConnection
  • Qt::DirectConnection:直连。同个线程上同步执行,emit后的代码将在槽函数执行后继续执行,本质上就是函数调用
  • Qt::QueuedConnection:队列连接。支持跨线程操作,emit后信号会放入队列,接收对象所属线程的事件循环从队列获取信号再执行对应的槽函数
  • Qt::BlockingQueuedConnection:阻塞队列连接。信号发送后当前线程会阻塞,直到槽函数执行完成,禁止在sender和receiver位于同一线程时使用,避免死锁
  • Qt::UniqueConnection:唯一连接。用“|”与其余信号一起使用,指明同一个信号只与同一个槽进行连接,避免多次连接导致调用多次槽函数
注意:QThread对象依附在主线程中,QThread对象的slot函数在主线程中执行,而非QThread管理的子线程。若需在子线程中执行slot函数可以通过moveToThread

【信号槽注意事项】

  • 使用信号槽的类需要继承自Object或其子类,声明需要加上Q_OBJECT(指明头文件xxx.h由moc进行编译,生成moc_xxx.cpp文件)
  • 信号由signals:标明,返回类型只能为void,访问权限默认为public且只能为public
  • 槽函数由slots:标明,返回类型没要求(一般为void),访问权限可以为任意指定,即private slots、protected slots、public slots
  • 信号和槽需要参数一致,参数类型一致,槽函数的参数数量可以少于信号的参数,例如sigTest(int, int, double, string)与slotTest(int, int)可以进行connect
  • 信号只需声明,槽函数声明后须定义
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT信号槽的使用 的相关文章

随机推荐

  • 信息安全概念

    1 信息安全定义 国际标准化组织 lntemational Organization for Standardization IS0 息安全的定义为 为数据处理系统建立和采取技术 管理的安全保护 保护计算机硬件 软件 数据不因偶然的或恶意的
  • 创建一个报表服务器项目,创建报表服务器项目

    创建报表服务器项目 10 17 2017 本文内容 Azure DevOps Server 2020 Azure DevOps Server 2019 TFS 2018 TFS 2013 Azure DevOps Server 以前名为 V
  • 电影下载地址大集合,只要是电影就能找到

    看到很多人都想找一些奇葩 或者国内很少见的电影 你们还在百度 微盘上搜索么 还在人人影视上溜达么 以下收集各大电影网站 绝对能满足你们 如果你不是那么热爱电影 只是闲暇之余看看热门的新片 美剧 不求画质与速度的话 那么下面这几个网站已经能满
  • VB

    文章目录 变量定义 Sub过程 函数定义 控制台输入输出 switch case语句 IF语句 FOR循环语句 不等于 逻辑运算符 控制台输入回车不崩溃函数 获取外部库指针内容放到自定义类中 读ini文件 变量定义 int Dim 变量名
  • 深度学习学习率的调整

    20220626 0 引言 最近在做实验的时候 由于结果一直都不怎么好 我就在想是不是过拟合了 那就算不是过拟合 是不是根本没有学习到数据集中的信息呢 想到了这些事情 我就直接把测试集的效果跟随着训练过程直接打印出来了 当然 实际过程中 肯
  • 1.Linux命令-删除

    Linux的删除命令 在Linux下删除文件 我们使用rm命令 还有搭配相应的参数 具体的选择我们看下面看说明 rm 参数 文件名 参数说明 1 f force 忽略不存在的文件 强制删除 无任何提示 2 i interactive 进行交
  • windows下qtmqtt模块的编译安装-Qt5.12.12

    windows下qtmqtt模块的编译安装 Qt5 12 12 代码获取及编译环境 代码获取 方式1 方式2 配置编译环境 编译安装 代码获取及编译环境 代码获取 方式1 直接git拉取至本地 git clone https github
  • PyTorch显存机制简要分析

    显存开销 显存占用约为element个数的4倍 注意不会将空闲的显存释放 模型参数 模型参数的梯度 优化器状态 跟踪每个权重参数 比如记录动量 中间结果 前向传播时计算的中间结果 显存分析方法 No Nvidia smi PyTorch中即
  • 《JavaScript设计模式》初次笔记——wsdchong

    JavaScript设计模式 初次笔记 前言 设计模式一直久仰大名 但是没有去花时间去了解 于是今天特意花时间去看 JavaScript设计模式 2013年6月出版 和w3cschool上的设计模式 然后做了一些笔记 以 JavaScrip
  • 随机游走序列平稳吗_【问答】时间序列系列(一)—— 平稳序列

    编写 果壳屋 什么是平稳 非平稳序列 如果时间的变化不会导致分布的变化 我们谈论的是分布统计属性 如均值 方差和协方差 我们就把时间序列称为为平稳的 stationary 这并不意味着序列不会随时间而变化 只是它的变化方式本身不会随时间而变
  • mybatis实现继承映射

    ORM 框架的优势在于能让我们利用面向对象的思维去操作数据库 hibernate 作为重量级的 ORM 框架对面向对象的支持很强大 作为半自动化的 mybatis 对面向对象的支持也是很完备的 这篇文章就来讨论一下如何利用 mybatis
  • Vue的路由

    一 Vue的路由 1 路由 路由 从源页面到目的页面的决策过程 2 前端路由 前端路由 在前端页面中维护的路由规则 1 hash 在地址中以 分隔页面 2 history 在地址中以 分隔页面 3 VueRouter路由 VueRouter
  • 今天来聊一聊在人工智能技术发展中起到重要作用的蒸馏算法

    人工智能技术的迅猛发展已经带来了诸多突破和应用 但同时也面临着一些挑战 例如深层网络的复杂性和高计算成本 为了应对这些问题 蒸馏算法作为一种有效的知识传递方法被提出并广泛应用于人工智能领域 本文将深入探讨蒸馏算法的原理 关键技术以及其在人工
  • python的setup.py文件及其常用命令

    http www 2cto com kf 201209 153517 html 编写setup py文件 获取帮助 python setup py help commands python Standard commands build b
  • 【虾说区块链】什么是hash算法?什么是好的hash算法?

    欢迎收听 虾说区块链 现在区块链这个概念在互联网上相当火热 这里简单做一个普及 不涉及项目推广投资 单纯地对区块链相关基础知识概念作一个说明讲解 本人区块链技术爱好者 结合相关区块链资料总结整理了 虾说区块链 也是自己一个学习笔记 涉及相关
  • wireshark提取RTSP over TCP中的视频流

    wireshark提取RTSP over TCP中的视频流 文章目录 wireshark提取RTSP over TCP中的视频流 1 背景 2 提取前准备 3 H264提取步骤 4 后记 1 背景 前面文章中介绍了rtp中提取H264或者H
  • Flutter 之 Mac 环境搭建

    目标 在 Mac 下 搭建 Flutter 运行的 iOS 开发环境 基础环境 要安装并运行 Flutter 您的开发环境必须满足以下最低要求 操作系统 macOS 64 bit 磁盘空间 700 MB 不包括 Xcode 或 Androi
  • Mysql主从复制搭建

    找到cnf文件 root 7103a3767cad which mysqld usr sbin mysqld ns t 7103a3767cad usr sbin mysqld verbose help grep A 1 Default o
  • 杨辉三角的重要结论

    第n行的m个数可表示为 C n 1 m 1 即为从n 1个不同元素中取m 1个元素的组合数 第n行的第m个数和第n m 1个数相等 为组合数性质之一 每个数字等于上一行的左右两个数字之和 可用此性质写出整个杨辉三角 即第n 1行的第i个数等
  • QT信号槽的使用

    QT4 QMetaQbject Connection QObject connect const QObject sender const char signal const QObject receiver const char slot