每次发出信号时都会多次调用插槽

2023-12-01

我在一个块中使用一个信号和槽连接。我的代码如下

in a.cpp

{
 QObject::connect(m_ptheFlange2Details,SIGNAL(GetFlang1DimAfterAnalysis()),
                 this,SLOT(GetFlang1DimAftrAnalysis()));

 m_ptheFlange2Details->get();// one function inside which i am emiting
                             // GetFlang1DimAfterAnalysis() signal ;

 QObject::disconnect(m_ptheFlange2Details,SIGNAL(GetFlang1DimAfterAnalysis()),
                     this,SLOT(GetFlang1DimAftrAnalysis()));

}

在 get() 函数内部,当执行此 emmit 语句时,该槽会被调用很多次。根据我的说法,它应该只调用一次。


正如一些评论中所述,这通常是由于多次调用 connect 造成的。每次建立连接时都会调用一次该插槽。例如,以下代码将导致slot()被呼叫 3 次时signal()被发射一次。

connect(obj, SIGNAL(signal()), obj2, SLOT(slot()));
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()));
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()));

如果您在可能多次运行的代码中进行连接,通常最好使用Qt::UniqueConnection作为第5个参数。以下代码将导致slot()被呼叫 1 次signal()被发射一次。

connect(obj, SIGNAL(signal()), obj2, SLOT(slot()), Qt::UniqueConnection);
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()), Qt::UniqueConnection);
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()), Qt::UniqueConnection);

我猜您的代码无法正常工作的原因是因为您省略了第五个参数并将默认值连接到Qt::DirectConnection(对于单线程程序)。这会立即调用槽,就像函数调用一样。这意味着在断开连接发生之前可以再次调用 connect(如果程序中存在循环)。

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

每次发出信号时都会多次调用插槽 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 无法读取未定义的角度4的属性“名称”[重复]

    这个问题在这里已经有答案了 我正在尝试在组件模板中打印一个值 但我收到上述错误Cannot read property name of undefined 我已经从这个问题的代码中删除了额外的内容 我想访问第一行详细信息 组件文件 impo
  • Python:如何执行外部程序

    如何从程序内部执行程序而不阻塞 直到执行的程序完成 我努力了 os system 但它会停止我的程序 直到执行的程序停止 关闭 有没有办法让我的程序在外部程序执行后继续运行 考虑使用子流程 module Python 2 http docs
  • Javascript序列化窗口对象

    我想序列化一个包含窗口的窗口对象 这样 如果通过反序列化它并重新设置其属性来刷新 php 页面 则可以在内存中保持窗口打开 是否可以 例如 object window open test html 使用场景 当一个窗口打开时 它的引用是在创
  • 在一本大书中找到 10 个最常用的单词 [重复]

    这个问题在这里已经有答案了 我知道这个问题已经在论坛上被问过几次了 我没有找到任何可以被认为是最合适的解决方案的 标记 答案 所以再次询问 我们从书中得到了一篇非常大的文本 所有这些文本都无法放入内存中 我们需要找到文本中出现频率最高的 1
  • 解析地理查询始终为空

    我目前正在尝试让 Parse 的地理查询系统正常工作 在我的数据浏览器上 我安装了一个地理点类型的关键 位置 其中设置了纬度 30 27263636013176 和经度 97 75766807716373 的地理点 但是 如果我尝试使用以下
  • 如何获取Excel表格中选中的复选框值

    我正在执行一项与使用 Java 读取包含单选按钮和复选框的 excel 相关的任务 我已经尝试了很多 但无法进一步进行此操作 当我尝试读取包含复选框的单元格的数据时 它返回一个空值 有人可以帮忙解决这个问题吗 控件不包含在单元格中 而是作为
  • 如何使用 Ghostscript 将 PDF 转换为图像

    我发现 Ghostscript 能够将 PDF 转换为图像格式 I tried PDF 到图像转换器但无法清楚地理解它 我已经安装了gs905w64 exe但当我尝试add reference对于我的网络应用程序 我收到此错误 A refe
  • 位置无关代码指向错误地址

    我有一个用 NASM 2 11 08 编写的针对 macho64 架构的小示例程序 我正在运行 OSX 10 10 3 bits 64 section data msg1 db Message One 10 0 msg1len equ ms
  • Visual Studio 2015 混合应用程序 - 获取“EPERM,不允许操作”

    我遇到了一种荒谬的情况 我很高兴听到你们如何处理它 我有一个混合应用程序项目 Visual Studio 2015 Cordova Tools 在其中的 res 文件夹下 我有应用程序资源 整个项目 包括资源 均处于源代码控制 TFS 之下
  • Pandas 每月滚动操作

    我在写出这个问题时最终弄清楚了 所以我无论如何都会发布并回答我自己的问题 以防其他人需要一点帮助 Problem 假设我们有一个DataFrame df 包含此数据 import pandas as pd from io import St
  • ViewPager addOnPageChangeListener 不适用于同一选项卡单击

    我有一个ViewPager with addOnPageChangeListener ViewPager有 3 个选项卡视图 tab1 tab2 tab3 当用户单击 tab2 时 它会加载一些数据 基本上是RecyclerView 此时
  • 如何通过单击按钮获取 Chrome 中的当前 URL

    我正在制作一个 chrome 扩展 它共享一个网站的 url 现在我需要一个可以在浏览器中导航当前 URL 的代码 当我单击图标时 我想打开新选项卡 http www thatsite com sharer php u current UR
  • Android - 使用 unicode 显示分数

    我正在尝试做一个分数 我使用的是文本视图 但它渲染得不太好 5 u2044 9 它不会将文本变成一个很好的分数 而是覆盖部分数字并将它们压缩在一起 有什么解决方案或替代方案吗 Try tv setText Html fromHtml
  • 如何创建列类型为 Timestamp 的外部 Hive 表

    我想从 HDFS 中包含纪元的文本文件创建外部 Hive 表 假设该文件位于 user me test txt 这是文件内容 1354183921 1354183922 我安装了 Hive 0 8 1 并且应该能够使用 Timestamp
  • 在 Ansible 中搜索字典值

    有一本这样的字典 ossec datacenter atlanta hostname server1 fakedomain net ip 192 168 12 170 port 1515 miami hostname server2 fak
  • Unity 3d 中的 PlayerPrefs 不起作用(有时)[重复]

    这个问题在这里已经有答案了 救命 PlayerPrefs 似乎不起作用 也不知道为什么 我有一个简单的游戏 开头是 void Start if PlayerPrefs GetInt IsReturningUser 1 ScoreLabel
  • android 谷歌地图弹出按钮

    好的 到目前为止 我拥有的是一个带有 Google 地图的 Android 应用程序 我在其中放置了一堆图标 当单击这些图标时 会创建一个带有一些文本的弹出窗口 有什么办法可以在弹出窗口上放置一个按钮吗 如果这是不可能的 是否有某种方法可以
  • 从 GMail 的“已发送邮件”文件夹中获取电子邮件标头

    我的程序通过 GMail 向联系人发送电子邮件 通常情况下 这种方法效果很好 但我们注意到 有时我的程序 认为 它已发送的电子邮件实际上并未到达 Gmail 更不用说到达联系人了 我想我也许可以在程序中添加一个检查 访问 Gmail 已发送
  • HTML5 的输入模式属性忽略大小写

    我需要让 HTML 输入元素模式忽略值的大小写 就像如果正则表达式是 a z 我可以让它匹配所有大写字母吗 我知道我可以这样做 a zA Z 但那只是一个例子 我认为这是不可能的 规范上
  • 每次发出信号时都会多次调用插槽

    我在一个块中使用一个信号和槽连接 我的代码如下 in a cpp QObject connect m ptheFlange2Details SIGNAL GetFlang1DimAfterAnalysis this SLOT GetFlan