第一种

首先来看看老版本的 connect 写法,比较复杂些,需要将信号和槽进行明确的指定,包括形参。 
看一个示例:

为方便演示,先自定义一个 Button,然后定义两个重载的信号

lass MyButton : public QWidget
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = nullptr);

signals:
    void sigClicked();
    void sigClicked(bool check);
};
那么在用这个 Button 的时候连接这两个信号,按照旧版本的写法,应该是这样:

connect(m_pBtn,SIGNAL(sigClicked()),this,SLOT(onClicked()));

connect(m_pBtn,SIGNAL(sigClicked(bool)),this,SLOT(onClicked(bool)));

这种写法比较麻烦,常常在用的时候缺少括号,不过该写法很明确,一眼就能看出来是将哪个信号连接到哪个槽。

第二种

接着上面的示例,在 Qt5.0以后推出一种新的写法,如下:

connect(m_pBtn,&MyButton::sigClicked,this,&Widget::onClicked);

这种写法看起来很简洁,但是存在一些坑需要注意,这句写法如果用在上面的示例中,会报错下面的错误:

error: no matching member function for call to 'connect' connect(m_pBtn,&MyButton::sigClicked,this,&Widget::onClicked);

这是因为我们自定义的 Button 中存在两个重载信号,然后用这种 connect 的方式会无法识别到底想要连接哪个信号。所以,如果信号是重载的话,需要用下面的写法来替换:

connect(m_pBtn, static_cast<void (MyButton::*)(bool)>(&MyButton::sigClicked), this, &Widget::onClicked);

问题又来了,如果我的onClicked槽也是重载的话,还是会报同样的错误。因为编译器不知道你想要真正连接哪个槽。所以这里建议,如果信号重载,可以用上面的方法来写,如果槽重载…还是用第一种方法来 connect 吧,比较保险,虽然比较麻烦点。

第三种

最后来看一种最新的写法,忘记是在 Qt 的哪个版本推出的了,主要针对重载信号的连接做了调整,会更简单些: 
同样是上面的示例:

connect(m_pBtn, QOverload<bool>::of(&MyButton::sigClicked),this,&Widget::onClicked);

很显然这种写法相对于第二种会比较简单些,但依然不能连接到重载的槽函数,如果连接重载槽函数,还是会报之前的错误。

第四种:Lambda 函数写法

个人比较喜欢用lambda函数的方式,如果槽函数中的内容比较简单的话,没必要再去单独定义一个槽来连接, 直接用Lambda 函数会更简单。 
来看一下示例:

connect(m_pBtn, QOverload<bool>::of(&MyButton::sigClicked),

[=](bool check){

/* do something.. */

});

connect(m_pBtn, static_cast<void (MyButton::*)(bool)>(&MyButton::sigClicked), this, [=](bool check){

//do something

});

以上部分是转自:https://blog.csdn.net/luoyayun361/article/details/80768567

最后一部分的Lambda函数写法,是涉及到了C++11的特性,具体关于Lambda函数的形式、写法,可以看:https://www.cnblogs.com/yuankaituo/p/5135750.html

[转载] QT中的connect用法总结相关推荐

  1. Qt中QMessageBox的用法---看这一篇就够了

    一.详细说明 QMessageBox类提供一个模态对话框,用于通知用户或询问用户一个问题并接收答案. 消息框显示一个主要文本,用于向用户提示某个情况;显示一个信息文本,用于进一步解释警报或向用户询问问 ...

  2. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  3. format函数python的顺序_[转载] Python中format函数用法

    Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...

  4. matlab imagesc参数设置,[转载]matlab 中imagesc的用法

    imagesc(A) 将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色 imagesc(x,y,A) x,y决定坐标范围,x,y应是两个二维向量,即x=[x1 x2],y= ...

  5. QT中的setAttribute()用法

    https://blog.csdn.net/qq_27312943/article/details/50899866 模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户 ...

  6. matlab imagesc 坐标,[转载]matlab 中imagesc的用法

    imagesc(A) 将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色 imagesc(x,y,A) x,y决定坐标范围,x,y应是两个二维向量,即x=[x1 x2],y= ...

  7. [转载] Python中format函数用法

    参考链接: Python | format Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1. ...

  8. qt中Qtableview的用法

    QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: 一 添加表头 //准备数据模型     QStandardItemModel *student_model = ne ...

  9. (转载)Qt中MOC的一些限制

    无意中发现在Qt的文档里有一篇关于moc工具的limitation的文章,里头的东西值得学习一下. Qt一个链接的错误, 程序结构很简单, 就是designer设计主界面,在代码里用多重继承方式使用, ...

  10. QT 中 QCustomplot的用法

    主要介绍其用法 https://wendy.blog.csdn.net/category_11305276_2.html 官网:Qt Plotting Widget QCustomPlot - Dow ...

最新文章

  1. HTML5表单的创建及与PHP的交互
  2. java-vector hashtable过时?
  3. 关于void main()的误区
  4. 【渝粤题库】广东开放大学社会学概论形成性考核
  5. dh算法 理论依据_DH算法原理
  6. php排序算法面试题,PHP面试:尽可能多的说出你知道的排序算法
  7. Flink 1.10 Native Kubernetes 原理与实践
  8. Ubuntu16.04下修复宿主机时区错位8小时、修复容器相较于宿主机错位8小时问题
  9. Html时间自定义控件
  10. 数据仓库中的慢变化维度和快变化维度
  11. html 表格单元格点击事件,bootstrap table onClickCell点击单元格事件
  12. android怎么硬解锁,手机怎么强制解锁
  13. IDC基础知识-名词解释
  14. 全国软件工程专业大学排名!你报考的大学排第几?
  15. word学习-软回车替换为硬回车
  16. html自动请求favicon,浏览器默认请求的favicon.ico文件,可能带来的问题
  17. 英伟达点开后显示无法连接服务器,解决win10提示“无法连接到 NVIDIA 检查您的互联网连接”的教程...
  18. uniform对象及其使用
  19. Windows Server 2016 远程桌面会话主机授权设置
  20. AutoCAD Lisp LSP小程序 实现面积注记

热门文章

  1. c++虚函数动态联编需要避免的内存泄漏问题
  2. BZOJ2118[国家集训队] 墨墨的等式
  3. 基(là)础(jī)线段树详解
  4. 电商项目的app学习笔记(四)-路由跳转的过渡动画实现
  5. java递归用for实现_用java实现的经典递归算法
  6. html头部打开页面为兼容模式,Web页面因为兼容模式产生的奇怪问题解答
  7. linux自动化安装集群,Redis自动化安装以及集群实现
  8. java中的servlet_关于JavaWeb中Servlet的总结
  9. c语言试讲课程,《C语言程序设计教程》试讲教案.doc
  10. html如何消除空格字符串,jquery如何去除字符串的空格