最近将公司的界面开发库从WX转换到了QT,有了信号和槽,原本我们在使用WX的时候,为了使用信号,我们是使用BOOST的signal2库,到了QT有了信号槽,这个就没什么必要了

但是前段时间使用QT发现QT的信号和槽没有placeholder,也就是占位符,于是信号和槽声明只能严格地一样,比如

void slot(int val);

void signal( int val);

但是在signals2,我们可用利用placeholder,及时函数声明不一样,也可用进行connect

void slot(int val);

void signal( int val);

void slot1(int val,double x,double y);

void slot2(double x,int val );

这样我们可用少写很多代码来对数据进行binding,组里其他人为了达到这种效果,于是要么声明一个类,然后类里面声明一堆可能用到的数据,再发送,有的则是发送多个信号,非常蛋疼

我本来想把qt的信号换成boost的信号,后来老大不同意,理由是增加学习成本,虽然我一直觉得没什么成本

不过后来写代码的是否发现QT里面connect有多个声明,我看了下,一个声明是由类似于boost的利用模板的,我尝试使用了下,发现确实可用使用匿名函数

connect( sender,&signal,[&](void) {lambdafunctionBody;} );

但是在使用bind的时候,死活都无法connect,一旦connect就会编译错误

auto fnBind = boost::bind( &class::function,this );

connect( sender,&slot,fnBind );

调了一下午才发现,QT的connect是使用模板的,他不会自动把fnBind转换为function,这样在编译的时候,自然因为不符合function的语法而编译错误,而auto是会

把fnBind推导为boost::bind类型的,于是只能自己手动编写了

boost::function<void(void)> fnBind = boost::bind( &class::function,this );

connect( sender,&slot,fnBind );

编译通过,不用写那么蛋疼的代码了

QT5中的信号与槽与C++ 11的function的配合的更多相关文章

  1. Qt5中的信号槽

    Qt4中的信号槽 Qt4中的信号槽是通过SIGNAL,SLOT两个宏,将参数转换成字符串.Qt编译前,会从源码的头文件中提取由signal和slot声明的信号和槽的函数, 将其组成一张信号和槽对应的字 ...

  2. PyQt5中的信号与槽,js 与 Qt 对象之间互相调用

    一.PyQt中的信号与槽 信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信.在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject ...

  3. Qt Quick中的信号与槽

    在QML中,在Qt Quick中,要想妥善地处理各种事件,肯定离不开信号与槽,本博的主要内容就是整理Qt 中的信号与槽的内容. 1. 链接QML类型的已知信号 QML中已有类型定义的信号分为两类:一类 ...

  4. Qt5教程: (2) 信号与槽

    1. 新建工程 新建一个"Qt Widgets Application"工程 2. 添加按钮 一个Qt工程会有很多个控件, 如果把逻辑代码都写在main函数里, main函数会非常 ...

  5. Qt5 connect 重载信号和槽

    转载文章超哥的经验之谈---Qt5 connect使用之"重载信号和槽" 在Qt4中,关联信号与槽是要使用到SIGNAL()和SLOT()这两个宏. QLabel *label = ...

  6. Qt中使用信号和槽的一点心得

    信号(Signal)与槽(Slot)-Qt中的典型机制 这一篇文章中都说得很详细了,这里不再重复,只说一点在实际使用中可能会遇到的问题. 1.一个信号不要同时连接几个槽函数,不然执行的顺序是随机的,最 ...

  7. QT5:第八章 信号与槽机制

    一.简介 QT编程中信号与槽用于处理界面各个组件的交互,类似与MFC的消息循环和绑定 注意:在使用信号与槽的类中,必须在类的定义中加入宏定义Q_OBJECT 信号(Signal)就是在特定情况下被发射 ...

  8. PyQt Designer中连接信号和槽时为什么只能连接控件自己的信号和槽函数?

    老猿在学习ListView组件时,想实现一个在ListView组件中选中一个选择项后触发消息给主窗口,通过主窗口显示当前选中的项的内容. 进入QtDesigner后,设计一个图形界面,其中窗口界面使用 ...

  9. QT+信号有参数与无参数的实现+QT4和QT5在信号和槽使用上的区别

    在QT5中,信号有参数和无参数 #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushB ...

随机推荐

  1. 获得项目的绝对地址 getRequestURI,getRequestURL的区别

    java获得tomcat项目的绝对地址 String basePath = request.getScheme()+"://"+request.getServerName()+&q ...

  2. Sobel算子 (转)

    幻灯片1 Sobel算子 幻灯片2 一.Sobel边缘检测算子 l 在讨论边缘算子之前,首先给出一些术语的定义: l (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始, ...

  3. Codeforces Round #375 (Div. 2) A B C 水 模拟 贪心

    A. The New Year: Meeting Friends time limit per test 1 second memory limit per test 256 megabytes in ...

  4. ZOJ 1241 Geometry Made Simple

    /*Mathematics can be so easy when you have a computer. Consider the following example. You probably ...

  5. mysql最大连接数

    通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...

  6. JS初学之-循环生成坐标

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  7. LNMP环境搭建(discuz论坛)

    一.操作系统级环境及软件版本 操作系统:CentOS release 6.5 (Final)minimal 内核版本:2.6.32-431.el6.x86_64 MySQL版本:MySQL-5.6.2 ...

  8. Android 中解析 JSON

    有什么不懂的可以去官网去看看:www.json.org 在google android中也有关于解析JSON的类库:JsonReader,但是只能在3.0以后的版本中才可以用,在这里我们用google ...

  9. HDU-4276 The Ghost Blows Light (树形DP+背包)

    题目大意:在一个n个节点的树形迷宫中,1为起点,n为出口.每个节点上有一定价值的珠宝,在节点之间移动的时间已知,问在能走出迷宫的前提下并且不超过m的时间内能收集的最多珠宝是多少? 题目分析:在树上,从 ...

  10. poj1236 强连通

    题意:有 n 个学校每个学校可以将自己的软件共享给其他一些学校,首先,询问至少将软件派发给多少学校能够使软件传播到所有学校,其次,询问添加多少学校共享关系可以使所有学校的软件能够相互传达. 首先,第一 ...