在Qt开发中,有两种情况能够触发槽函数被触发两次,第一种情况是必现的,属于错误的写法,是指信号和槽关联两次;第二种情况是偶然出现的,是指对信号没有正确理解导致的。

1.信号与槽关联两次

    通常这种情况下发生在混合编程的情况下,即既使用了UI来进行布局,又使用来代码来关联信号,使得信号和槽关联两次。不妨以QPushButton中的button为例,通常在使用ui文件布局中自动生成的文件中会调用这样一句话:

QMetaObject::connectSlotsByName();

这样则代表隐式调用connect(button, &QPushButton::clicked, this, &myWidget::on_button_clicked);此时开发者只需要实现on_button_clicked即可,如果再在代码中显示添加信号和槽连接,则会触发槽函数两次

2.QPushButton中的pressed,released, clicked信号

通常这种情况发生在对信号的关联上,以QPushbutton为例,其他的如果有类似情况可以延伸,首先复现这种场景需要正确理解QPushButton中的三种信号:pressed指的是鼠标左键按下的动作,released指的是鼠标左键抬起的动作,clicked指的是鼠标左键按下并抬起的动作,因此触发优先级为pressed>released>clicked.

考虑场景,关联pressed信号,测试鼠标快速点击button,点击button关闭对话框并打印进入对话框的次数,测试发现:在多次尝试后,会出现概率性的一次点击,进入两次对话框的情况,但是关联clicked信号却不会出现这种情况。

  避免情况:因此,如果不需要区分三种信号触发的优先级,建议在开发过程中尽量使用clicked信号。

Qt中槽函数触发两次的两种场景分析相关推荐

  1. QT中main函数中加载外部字体:OTF

    QT中main函数中加载外部字体:OTF 我们开发的程序中,如果想使用外部下载的开源字体,同时保证在软件发布时,程序字体能保证和开发者环境下一致,且不想通过安装字体方式实现字体跟随软件时,我们需要在代 ...

  2. qt槽函数如何传递多个参数_Qt中connect函数不能传递参数的两种解决方法

    Qt中的connect函数可以让我们动态地管理信号和槽. 比如现在界面上有一个标签,id为label.我现在想要动态地创建一个按键,id为push,然后利用connect函数,实现点击push以后,l ...

  3. Qt信号槽中槽函数为虚函数的一些感想

    有时候,在写connect的时候会去犹豫一个问题----我的槽函数到底需不需要为虚函数.这个问题在我每次写connect的时候我都会反问自己,因为确实,如果你不去深究里面的moc,你发现不了太多问题. ...

  4. QTimer计时速度不断加快问题和QT中show函数失效问题的思考和处理

    使用QT所遇问题之QTimer和show 一. QTimer计时速度不断加快问题 1. 问题的发现 2.问题解决的思路 (1)梳理整个功能实现的逻辑 (2)监控进入定时器中断的次数 (3)跟踪参数lo ...

  5. QT 中 connet 函数

    定义:connect,是QT中的连接函数,将信号发送者sender对象中的信号signal与接受者receiver中的member槽函数联系起来. 源码: static bool connect(co ...

  6. QT中connect函数的几种用法详解总结

    前言 信号与槽机制是QT非常核心的东西,通过信号与槽我们可以将不同的部分有机的结合起来,使得各个组件之间的交互简单高效,信号与曹槽像是设计模式中的观察者模式(我自己觉得是这样),只关心信号何时发来,以 ...

  7. Qt中tr()函数的使用

    关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: 因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr 另一类人,确实是出于国际化的需要,将需要 ...

  8. Qt中exec函数的作用

    Qt中的exec()方法到处可见,例如: QCoreApplicaton::exec()  QApplication::exec() QDialog::exec() QThread::exec() Q ...

  9. php自然排序法的比较过程,PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)...

    本文实例讲述了PHP中strnatcmp()函数"自然排序算法"进行字符串比较用法.分享给大家供大家参考,具体如下: PHP中strnatcmp()函数使用"自然&quo ...

最新文章

  1. Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S
  2. 三圆相交阴影部分面积_小学六年级图形面积的题很多家长都不会,一些初中生也未必会做...
  3. Python List reverse()方法
  4. 【VBA】多条件去重
  5. *【CodeForces - 1150D】Three Religions(dp,预处理,思维)
  6. Linux 下挂载新硬盘方法(转)
  7. Java多线程学习三十九:CAS 有什么缺点?
  8. 2.10 m 个样本的梯度下降
  9. transient是干嘛的
  10. $, $, $$, $$, $$a (Run Script File)
  11. 3D 空间音效+空气衰减+人声模糊
  12. 把IE武装到牙齿,IE插件全攻略(转)
  13. 安徽财贸职业学院计算机信息管理怎么样,让别人看看安徽财贸职业学院计算机系汪永涛辅导员如何对待我的!!...
  14. Android 实现自定义宽高比的ImageView
  15. Allegro基本规则设置指导书之Electrical Total Etch Length
  16. Python 中iterator
  17. React-虚拟DOM
  18. Java~二叉树的前中后序遍历的几种方式(递归法,迭代法,标记法等)
  19. 基于Python二手交易系统设计与实现 开题报告
  20. 华硕 您的计算机无法启动,华硕电脑无法开机怎么办

热门文章

  1. Linux学习之四——磁盘与文件系统管理
  2. 解决swiper-slide在ion-slide-box不滑动的问题(暂且这么描述)
  3. mysql 中文乱码解决方法
  4. Java Platform Standard Edition 8 Documentation
  5. EYQiPa,梦开始的地方
  6. 转载 从SRAM中读写一个数据问题——Verilog
  7. asp.net 时间显示格式
  8. (转)利用MS AJAX 扩展服务器端控件
  9. vc6.0 matlab混合编程,matlab2010 + vc6.0混合编程实例(调用dll)
  10. 红旗linux 进不去图形界面,进不了红旗Linux6.0的图形界面请高手帮忙