Qt 自定义槽函数被执行两次

Qt中槽函数调用两次问题 简述槽函数调用两次问题 阅读详情

之前玩qt都是在Qt软件里玩,最近换了使用VS2019去玩,在对于信号与槽这块中,发现了一个问题:我在ui界面拖了一个按钮,然后按照qt的槽方法命名规则进行槽函数的命名,最后在构造函数中进行信号与槽的连接。然而运行后,单击按钮触发槽函数却执行了两次!!!
这就百思不得其解,最后在百度中找到了问题的根源,现在把问题的解决方法记录下来。


首先把我自己写的问题代码写下来

  1. ui界面拖动的按钮:
    在这里插入图片描述
    对象名为:startBtn

  2. 自己定义的槽函数:

    private slots:
        void on_startBtn_clicked();
    

    具体实现就不显示了。

  3. 构造函数中进行信号与槽的连接:

    connect(ui.startBtn, SIGNAL(clicked()), this, SLOT(on_startBtn_clicked()));
    

其实看上去也没什么问题,也都没有报错。
其实这是有问题的。


解决方案:

将构造函数中的connect信号与槽的连接删除就好了!

原因:
代码中定义的槽函数的命名是按照qt的命名规则命名的,所以qt系统默认会帮我们把信号与槽连接起来,而我们在构造函数中再一次进行了连接,所以槽函数就被连接了两次,当按钮点击后,也自然而然的执行了两次槽函数。
qt默认槽函数命名规则:on_按钮对象名字_信号名字

当然也可以不按qt的命名规则命名槽函数,这样也不会出现槽函数被执行两次的问题。


总结:
在vs中玩qt,少了许多在qt软件中的便捷,所以也会出现许多各种各样的小问题,但这也是一种提升自己的体现,加油吧,打工人!

Qt开发 槽函数定义,以及槽函数二次响应多次响应问题 在Qt开发里面,有一种传说中的信号槽机制,有好几种实现的方法。 为了实现ui和逻辑的解耦,Qt开发可以利用Qt designer来做UI,同时也有一些UI和逻辑函数之间的通讯建立。 例如,要实现button的相应,有下面几种方法: 1 可以在模式下面,自己定义信号和槽函数,然后在窗口类里面,把相应的槽函数定义好 2 可以纯代码实现。把ui的控件拖动好,把槽函数写好,然后用一句c 阅读详情

相关推荐

Qt按钮点击触发的信号槽陷阱:一次点击槽函数执行两次的排查与根治

在Qt桌面应用开发中,事件循环与信号槽机制是构建交互逻辑的基石。按钮点击会沿着事件分发链路,从操作系统进入QApplication,再经event()分发到QPushButton的鼠标事件处理函数,最终触发clicked信号。若事件冒泡未被正确拦截,或自定义控件中重复发射信号,就会导致一次点击却执行两次槽函数的问题。理解accept与ignore的语义、正确使用事件过滤器、借助Qt::UniqueConnection防重复连接以及QSignalBlocker临时屏蔽信号,是定位并修复此类“幽灵触发”的关键。

weixin_34779181的博客 228

Qt槽函数会被执行多次的问题原因及解决方法

因为初始化函数在在整个程序中只运行一次,所以这里面连接信号和槽,就能避免重复连接问题了。 Qt::UniqueConnection的作用是:如果该信号以前没连接过,则连接它,返回true,如果以前连接过,则不再连接,返回false。例如 connect(ui.btn, &QAbstractButton::clicked, this, &QtWidgetsApplication2::btnClicked, Qt::UniqueConnection); QMetaObject::Connection conn

m0_52467164的博客 1824

qt之文本编辑器

参照网上一文章点击打开链接,对应写了下这个程序; 具体过程如下: 首先还是界面的设计: 这分别表示界面布置,信号/槽,动作。 下面为代码: //mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include "ui_mainwindow.h" #include #include #in

Yuippe的专栏 1548

Qt中槽函数被执行两次

你在ui中设计了一个名为"pushButton"的按钮,然后在代码中该按钮涉及的槽函数,又是以on_pushButton_clicked()命名的,如下图。如果这个时候,我们还用了connect()去再关联一遍,那就重复了,当我们再按下按钮时,就会执行两遍槽函数。,因为代码中定义的槽函数的命名是按照qt的命名规则命名的,所以qt系统默认会帮我们把信号与槽连接起来。**问题:**在Qt中设计UI界面的时候,发现有的槽函数被执行了两次。2)对于槽函数的命名不要使用系统默认的命名方式。

dongliLK的博客 1003

【QT】多个信号 关联 同一个 槽函数

背景:多个信号需要执行同一个函数或者一类函数的时候,可以选择每个信号创建一个槽函数去实现功能,如果直接关联到一个函数中,该函数只能执行一份功能,有时候并不能满足业务需求在多个信号绑定到同一个槽函数的状态下,让槽函数根据绑定的不同的信号执行不同的功能有两种方法:(1)在槽函数中获取到sender对象,反向解析出信号的名称,分叉执行;(2)使用QSingalMapper类:管理多个信号,槽函数的处理相...

跬步至千里 2万+

NoUnityCN:绕过地域限制,从Unity官方CDN直链下载全版本编辑器

在软件开发和游戏制作领域,内容分发网络(CDN)是保障全球用户高速、稳定获取大型文件的核心基础设施。其原理是通过将资源缓存至遍布各地的边缘节点,使用户能从地理距离最近的服务器获取数据,从而显著提升下载速度并降低源站压力。这一技术对于需要频繁下载大型开发工具(如游戏引擎)的团队而言,价值在于能确保开发环境部署的一致性与效率,是构建自动化CI/CD流水线和团队协作的基础。然而,当开发者因网络策略或地域限制无法直接访问官方CDN时,获取安装文件便成为阻碍工作流的痛点。NoUnityCN项目正是针对此场景的工程实践

weixin_33473110的博客 312

Qt中槽函数触发两次的两种场景分析

在Qt开发中,有两种情况能够触发槽函数被触发两次,第一种情况是必现的,属于错误的写法,是指信号和槽关联两次;第二种情况是偶然出现的,是指对信号没有正确理解导致的。 1.信号与槽关联两次 通常这种情况下发生在混合编程的情况下,即既使用了UI来进行布局,又使用来代码来关联信号,使得信号和槽关联两次。不妨以QPushButton中的button为例,通常在使用ui文件布局中自动生成的文件中会调用这样一句话: QMetaObject::connectSlotsByName(); 这样则代表...

xx18030637774的博客 3071

Adams与Matlab联合仿真入门:从零搭建你的第一个动力学模型

本文为Adams与Matlab联合仿真新手提供了一份详尽的入门指南。文章从软件环境配置、版本兼容性检查讲起,逐步演示了如何在Adams中构建单摆动力学模型并定义输入输出接口,以及在Matlab/Simulink中搭建控制回路。通过一个完整的受控单摆实例,手把手教你完成从模型导出、模块生成到执行联合仿真的全流程,帮助你快速搭建并运行第一个联合仿真模型,实现动力学与控制系统的协同验证。

g5h6i7j的博客 699

VS2019与Qt5.14.2联合编程下,信号与槽的实现

VS2019开发环境中Qt槽函数的使用

Mr_Legendg的博客 1238

Abaqus子程序开发避坑指南:从UMESHMOTION到齿轮磨损分析实战

本文深入探讨Abaqus子程序开发中的关键技术与避坑指南,重点解析UMESHMOTION在齿轮磨损分析中的实战应用。从开发环境搭建、调试框架构建到性能优化和大规模计算,提供系统化的解决方案。通过真实案例展示如何避免内存泄漏、网格畸变等常见问题,并介绍数据驱动的磨损预测等前沿技术,帮助工程师提升仿真精度与效率。

weixin_30892037的博客 87

LCD工程师必看:Pixelclock、Mipi Clk计算全解析(附实用公式)

本文为LCD工程师详细解析了像素时钟(Pixelclock)与MIPI时钟(Mipi Clk)的核心计算方法。文章从时序参数构成入手,通过实战公式推导,系统阐述了从屏幕分辨率、刷新率到最终MIPI速率的高效计算链路,并提供了实用的调试思路与排查清单,帮助工程师快速解决画面撕裂、闪烁等常见问题。

weixin_29266679的博客 388

qt 槽函数在那个线程执行由什么决定

qt 槽函数在那个线程执行由什么决定

xie__jin__cheng的博客 1794

微信小程序 - 最新详细实现“全局实时监听页面发生跳转“ 当页面跳转后立即捕捉并触发某个操作或调用处理函数,小程序整个项目无时无刻只要路由发生变化改变了就能监听,时刻检测页面URL变化(获取路由数据)

微信小程序,vue2,vue3,监听路由,如何监听路由发生变化,如何watch监听路由,怎么全局监听页面发生变化,实现当页面路由发生变化时执行一个函数,当路由变化时执行一些操作执行一段代码,怎么监听路由变化时触发一个函数,监听页面变化,页面间的跳转如何监听,页面跳转时怎么拿到路由及参数,页面路由变化时拿到参数和url,使用watch监听路由变化,页面跳转后怎么触发事件,怎么监听页面跳转,监听页面跳转并拿到路由url路径,小程序怎么全局定义一个专门监听路由的函数,小程序怎么无时无刻实时监听路由页面跳转,监听当

🏆 前端领域优质创作者 4474

【QT入门】 Qt槽函数五种常用写法介绍

【QT入门】 Qt槽函数五种常用写法介绍

LF__plus的博客 1万+

基于YOLOv8的端面小目标计数解决方案: 多头检测器+小缺陷到大缺陷一网打尽的GiraffeDet+Wasserstein Distance Loss | 助力工业小目标缺陷检测

端面小目标计数部署解决方案 | 亲测在工业小目标缺陷涨点明显,原始mAP@0.5 0.936提升至0.955

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1955

2025华为od面试手撕代码【求字符串表达式结果】

2025华为od面试手撕代码【求字符串表达式结果】

MISAYAONE的博客 1351

Qt自定义信号和槽函数

一、背景 实际开发中,如果仅使用 Qt 提供的信号函数和槽函数,会经常遇到信号函数的参数类型和个数无法满足实际需求、信号函数和槽函数的参数类型不匹配等问题。解决此类问题,最简单有效的方式就是:自定义场景需要的信号函数和槽函数 二、自定义信号函数 信号函数指的是符合以下条件的函数: 定义在某个类中,该类直接或间接继承自 QObject 类; 用 signals 关键字修饰; 函数只需要声明,不需要定义(实现); 函数的返回值类型为 void,参数的类型和个数不限。 class MyWidget

sinat_31608641的博客 4148

后仿真中的必懂VCS仿真选项之initreg和deposit

后仿真中,我们常常对于没有复位寄存器和存储器单元,使用仿真选项之initreg和deposit,两种处理方式。今天做总结。请注意:请勿将两者进行同时使用。对于到底选取哪种方式,要结合实际的情况决断。但是,两者同时使用,会有冲突,得不到预期结果。

那么菜的博客 4331

vs2019 +Qt 槽函数执行两次

1.Qt翻译机制 用官方的槽函数写法“ on_对象名称_信号类型 ”可以不用写connect函数,可以直接触发槽函数。 例如: on_btn_pressed() on_photoGrid_triggered() 2.Connect连接方法 利用Connect函数连接对象和槽 形如: connect(ui->btn,signal(pressed()),this,slot(on_btn_pres...

蜗牛在听雨的博客 1853

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Qt自定义槽函数

实例代码 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPushButton> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); ...

weixin_37603532的博客 6024

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Qt 信号槽原理 - 槽函数调用时机

通过阅读信号槽相关源码,了解信号槽机制,知道槽函数的调用时机

qq_62381297的博客 3410

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

05黑马QT笔记之自定义槽函数

05黑马QT笔记之自定义槽函数 1 自定义槽函数其实不难,没什么好说的,注意以下几点便可。 自定义参函数注意事项(Qt5): * 1)自定义槽函数可以是类成员函数(用得最多)、全局普通函数、静态函数。 * 2)槽函数返回值、参数类型要与信号一致(槽函数的尾部可以少于信号 但前面的必须相同)。 * 3)由于信号返回值为空void,所以槽函数也肯定没有返回值。 例子:需要实现:按下close按钮,执行...

weixin_44517656的博客 1401

qt 线程、信号、槽、触发的槽函数在那个线程运行

qt 线程、信号、槽、触发的槽函数在那个线程运行

xie__jin__cheng的博客 3782

QT发射一次信号,槽函数执行了多次的背后思考

我有一个梦想,我写的代码,可以像诗一样优美。我有一个梦想,我做的设计,能恰到好处,既不过度,也无不足。 如题,Qt发射了一次信号,关联的槽函数执行了多次。

ta_123123的博客 4930

Qt 槽函数被执行两次的问题

在使用vs2015编写QT程序时,偶然发现点击一次button槽函数响应了两次。我起初认为是鼠标问题,特意换了鼠标试试结果还是一样的,所以我就研究了一下。 按钮的名字是btn_account_add。以前我用Qt Creator,给按钮添加槽函数直接右键->转到槽,声明实现都自动生成了,方便的很,然而vs2015没有这个功能,只能自己手动添加,下面是我添加的代码。 槽函数声明处: private slots: void on_btn_account_add_clicked(); 槽函数实现处 vo

007的博客 3802
上一篇: 命令行操作MySQL - 整型(int)类型介绍
下一篇: Qt 使用C++特性“引用” - 获得槽函数的返回值
cpp_learners
博客等级 码龄7年 1526粉丝 274原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值