connect函数在qt中作为连接信号和槽的函数,并不陌生。它目前有以下3种写法:

1、使用SIGNAL和SLOT宏

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(onPushButtonClicked()));

2、使用&类名::函数名

connect(ui->pushButton_2,&QPushButton::clicked,this,&Widget::onSetBlockedSignalStatus);

3、Lambda表达式,关联后直接编写信号发射后要执行的代码。不需要定义槽函数。

    connect(ui->pushButton,&QPushButton::clicked,[=](void){ui->label->setText("Hello Qt");});

使用SIGNAL和SLOT宏是Qt4的写法,在Qt5中不仅支持使用SIGNAL和SLOT宏的写法,也支持使用&类名::函数名的写法。使用使用&类名::函数名的写法有以下几个好处:

1、不需要写参数更简便。

2、不需要槽函数的参数类型与信号对应的参数类型完全一致,只需要进行隐藏式转换。

3、可以在编译时进行检查,比如信号或槽函数的拼写错误、槽函数参数数量多于信号的参数数量等都能在编译时期发现,而不是运行时。

就如一些qt的书所言:建议在编写Qt5的代码时使用&类名::函数名的connect方式。

demo:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(this->ui->pushButton,&QPushButton::clicked,[=](void){emit sigSendArgs("ip","port");});connect(this,SIGNAL(sigSendArgs(QString,QString)),SLOT(onSendArgs(QString,QString,QString)));//connect(this,&Widget::sigSendArgs,this,&Widget::onSendArgs1);
}Widget::~Widget()
{delete ui;
}void Widget::onSendArgs(QString a, QString b)
{qDebug()<<"a:"<<a<<"b:"<<b;
}void Widget::onSendArgs1(QString, QString, QString)
{}
1、sigSendArgs与onSendArgs的参数不一致,但是编译的时候却并没有发现,直到运行才看到日志打印。

2、如果使用connect(this,&Widget::sigSendArgs,this,&Widget::onSendArgs1);的方式在编译期间就会提示参数不一致的问题。

3、 当我们使用SIGNAL的写法connect一个并不存在的槽函数时,编译器并没有提示。但是如果使用类名的方式,编译就会提示错误:

    //connect(this,SIGNAL(sigSendArgs(QString,QString)),SLOT(onSendArgs2(QString,QString)));connect(this,&Widget::sigSendArgs,this,&Widget::onSendArgs2);

Qt之connect函数—信号槽连接的几种方式和优缺点相关推荐

  1. Qt——P13 Q4版本信号槽连接

    widget.cpp #include "widget.h" #include "ui_widget.h" #include <QPushButton&g ...

  2. QT源码剖析-QT对象通信机制信号槽的绑定具体实现

    本文详细介绍QT核心机制之一 信号和槽. 我们在此根据Qt源代码一步一步探究其信号槽的实现过程. 核心知识点: 模板元编程技术. Qt moc预编译机制. QObject类. 目录 1. QObjec ...

  3. 【Qt开发经验】Qt信号槽连接不成功问题原因汇总

    以下几种情况会导致信号槽连接不成功,下面分别描述. 1. 拥有信号槽的类,必须继承QObject,声明Q_OBJECT宏. Qt帮助手册里搜索 "Signals & Slots&qu ...

  4. VS2008 Qt Designer 中自定义信号槽

    一.Qt Designer自定义槽函数 发现:在VS2008 +Qt4.7  中打开ui文件,所用的英文QT Designer工具,没有转到槽函数的功能,不如QtCreator自带的QtDesigne ...

  5. Qt的connect函数和disconnect函数

    Qt的connect函数和disconnect函数 connect的使用方式 disconnect的使用方式 connect的使用方式 qt的connect函数,信号与槽的机制,是QObject的核心 ...

  6. pyqt5界面与逻辑分离--信号槽的装饰器实现方式

    pyqt5界面与逻辑分离--信号槽的装饰器实现方式 本文展示了 pyqt5 信号槽的装饰器实现方式(借鉴自 eirc6) 一个简单的例子.实现功能:两个数相加,显示结果.如图 两个文件,第一个是界面文 ...

  7. python中如何连接两个字符串_python字符串连接的N种方式总结

    python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 st ...

  8. Java连接Oracle两种方式thin与oci区别

    Java连接Oracle两种方式thin与oci区别 前几天同事跑过来跟我说, 机房中的一台tomcat服务器跟oracle数据库机连接很慢,查看控制台中的hibernate日志, 基本上是一条sql ...

  9. 计算机连接到网络的接口,路由器与计算机连接的三种方式及设置介绍

    如何将路由器连接到计算机进行设置?目前,随着计算机.智能手机.平板电脑等网络设备的普及,人们对网络的需求日益增加,这促进了路由器的广泛使用.然而,大多数用户不知道如何将路由器与计算机连接起来,然后进行 ...

最新文章

  1. 安卓没删干净导致报错
  2. 计算机职称在线考试报名系统,计算机职称考试报名时间及入口2021年9月
  3. PowerDesigner中的对象与关系映射建模
  4. python语言里数字包括_4.1Python语言中的数字、字符串数据类型讲解
  5. 【前端就业课 第一阶段】HTML5 零基础到实战(五)基础元素
  6. python文件和数据的格式化_Python在文本文件中格式化特定数据
  7. 9 CO配置-控制-成本中心会计-在成本控制范围激活成本中心会计核算
  8. Springboot vue.js html 跨域 前后分离 Activiti6 shiro 权限
  9. 分布式文件系统(FastDFS+Tengine+fastdfs-nginx-module)
  10. 什么是NVMe驱动器,您应该购买一个吗?
  11. 概率论总结(《概率论与数理统计》第四版 浙江大学)
  12. 电脑系统运行框代码大全
  13. Android应用层读写设备节点
  14. 阿里云OSS使用详解(java版本)
  15. Android 线程 Damo
  16. 高通烧录报ufs需要重新provision
  17. 一分钟详解智能快递柜锁控板方案和原理
  18. windows 远程桌面无法连接的问题
  19. 点餐系统Sprint1总结
  20. 注入(Injection)

热门文章

  1. 易验APP一键登录对接文档
  2. 将地图导出为图片或PDF文件
  3. Java基础(数组)对象数组
  4. 计算机图形学专业 国内大学排名,虚拟现实应用技术专业大学排名 2021全国排行榜...
  5. 如何有效学习《恋上数据结构与算法》,更快地理解数据代码?
  6. 昨天是运气不好 今天是心情不好
  7. Houdini概述——文件管理
  8. 海康威视设备SDK调用,是否支持IP通道的思考
  9. c语言的四大圣经,传说中的模拟电子四大圣经--值得永久珍藏
  10. 大数据性能测试工具Dew --转载自李智慧