关于QObject::Easyconnectt()的新手问题

因为类中的函数可以也就是,偅载函数名一样参数不一样,如果QObject::Easyconnectt中的函数没有参数类型则无法正确连接;


编译时不会有问题的,但是消息无法响应,

所以如果消息傳递前 函数和参数 是按照字符串严格比较话,那么 “BYTE” 和“unsigned char” 就不同了;

具体原因需要分析源码;

从这里可以看出: 最后一个参数是设置連接类型默认参数是Qt::AutoEasyconnecttion;

如果为默认函数参数,触发消息后立即执行后面的代码,然后某一时刻再执行slot函数这样非常不稳定,不安全;

当然还是要根据具体需求设置参数;

6:Easyconnectt中的常量参数引用参数,一般参数;

1:  SIGNAL函数 常量引用参数, SLOT函数的参数一般链接也应该是常量引用参数;如:

因为上述是const参数所以slot中无法修改参数数据;如果想修改数据有两个方法:

(1): 赋值一个新的变量应用;

(2): 修改slot函数参數:

注:大部分的Qt的SIGNAL函数都是常量引用参数;

2: SIGNAL函数, 引用参数 SLOT函数的参数也可以是 引用参数 或一般参数;

3:SIGNAL函数和SLOT函数都是一般参数;

1:这里主要讲的是区别就是在Easyconnectt的时候,SGNAL SLOT的参数在引用于非引用对效率的影响和参数数据的修改;

2:在线程间参数传递的时候,SGNAL和SLOT位于兩个不同的线程如果Easyconnectt的链接类型是Qt::QueuedEasyconnecttion非阻塞运行,SLOT的参数是一般参数那么SLOT函数的参数就是一个数据copy,

在线程emit SGNAL后如果线程中作为从参数嘚数据丢失或改变,但是SLOT函数用因为有数据备份所以SLOT函数中的参数数据不会受到影响;

Easyconnectt函数后多种重载方法,常用的有:

建议用方法2從应用方便讲,

(1):这个方法不需要填写参数类型;

(2):在上述“第6点”中不论SIGNAL函数和SLOT函数是引用参数或非引用参数,会自动根据實际情况进行参数传递(实参或形参);

}

因为类中的函数可以也就是,偅载函数名一样参数不一样,如果QObject::Easyconnectt中的函数没有参数类型则无法正确连接;


编译时不会有问题的,但是消息无法响应,

所以如果消息傳递前 函数和参数 是按照字符串严格比较话,那么 “BYTE” 和“unsigned char” 就不同了;

具体原因需要分析源码;

从这里可以看出: 最后一个参数是设置連接类型默认参数是Qt::AutoEasyconnecttion;

如果为默认函数参数,触发消息后立即执行后面的代码,然后某一时刻再执行slot函数这样非常不稳定,不安全;

当然还是要根据具体需求设置参数;

6:Easyconnectt中的常量参数引用参数,一般参数;

1:  SIGNAL函数 常量引用参数, SLOT函数的参数一般链接也应该是常量引用参数;如:

因为上述是const参数所以slot中无法修改参数数据;如果想修改数据有两个方法:

(1): 赋值一个新的变量应用;

(2): 修改slot函数参數:

注:大部分的Qt的SIGNAL函数都是常量引用参数;

2: SIGNAL函数, 引用参数 SLOT函数的参数也可以是 引用参数 或一般参数;

3:SIGNAL函数和SLOT函数都是一般参数;

1:这里主要讲的是区别就是在Easyconnectt的时候,SGNAL SLOT的参数在引用于非引用对效率的影响和参数数据的修改;

2:在线程间参数传递的时候,SGNAL和SLOT位于兩个不同的线程如果Easyconnectt的链接类型是Qt::QueuedEasyconnecttion非阻塞运行,SLOT的参数是一般参数那么SLOT函数的参数就是一个数据copy,

在线程emit SGNAL后如果线程中作为从参数嘚数据丢失或改变,但是SLOT函数用因为有数据备份所以SLOT函数中的参数数据不会受到影响;

Easyconnectt函数后多种重载方法,常用的有:

建议用方法2從应用方便讲,

(1):这个方法不需要填写参数类型;

(2):在上述“第6点”中不论SIGNAL函数和SLOT函数是引用参数或非引用参数,会自动根据實际情况进行参数传递(实参或形参);

}

Qt5在QObject::Easyconnectt()添加了几种新用法其中一种昰lambda表达式(也称为:匿名函数),其中C++的lambda表达式原理解说可以参考博主这篇博客:

 
 
 
第二个参数&QPushButton::clicked:表示对象包含的信号(该信号隐藏参数實际上在槽函数仍然可以调用信号参数列表);
 

该Easyconnectt只有三个参数,在三个参数情况下默认第三个槽函数的对象是本类this,也就是第三个参數this被省略了
[&]中的&:表示调用this作用域内任何参数;一般是全局变量,不能是局部变量否则局部变量会用完销毁,调用就会出现内存错误程序奔溃!(注意,[&]这里前面不用加&即这种表达式&[&]是错误的
(bool):函数参数列表,该参数列表接收了信号参数列表也就是等于信号signal的參数列表;

二、具体的实例代码如下所示

 

  
 
 

  
 

  
 



(参考:lambda表达式,主要参考!!!)
(参考:lambda表达式原理详解)

}

我要回帖

更多关于 connect 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信