深入探究connect函数
来源:互联网 发布:魔扣少儿编程网址 编辑:程序博客网 时间:2024/06/05 19:53
QObject::connect函数的学习
信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。
信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信。
(1)信号:当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。
(2)槽:用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制。
(3)信号与槽的连接:所有从 QObject 或其子类 ( 例如 Qwidget ) 派生的类都能够包含信号和槽。因为信号与槽的连接是通过 QObject 的 connect() 成员函数来实现的。
connect(sender, SIGNAL(signal), receiver,SLOT(slot));
函数定义:bool QObject::connect ( const QObject * sender, const char * signal,
const QObject * receiver, const char * member ) [static]
其中 sender 与 receiver 是指向对象的指针,SIGNAL() 与 SLOT() 是转换信号与槽的宏。
SIGNAL 和 SLOT是将其内容转为字符串,并且在前面加上标识符。
SIGNAL()宏和SLOT()宏中的函数的参数一定要严格一致。
connect中的常量参数,引用参数,一般参数;
1: SIGNAL函数, 常量引用参数, SLOT函数的参数一般链接也应该是常量引用参数;如:
signals:
void resultReady( const QString & s);
public slots:
void slot_string( const QString & str )
{
// str = "123";
qDebug()<<str;
}
connect( this, SIGNAL(resultReady(const QString&)), this, SLOT(slot_string(const QString&)) , Qt::DirectConnection);
因为上述是const参数,所以slot中无法修改参数数据;如果想修改数据有两个方法:
(1): 赋值一个新的变量应用;
(2): 修改slot函数参数:
void slot_string( QString str )
{
str = "123";
qDebug()<<str;
}
connect( this, SIGNAL(resultReady(const QString&)), this, SLOT(slot_string(QString)) , Qt::DirectConnection);
注:1:大部分的Qt的SIGNAL函数都是常量引用参数;
2: SIGNAL函数, 引用参数, SLOT函数的参数也可以是 引用参数 或一般参数;
3:SIGNAL函数和SLOT函数都是一般参数;
说明:
1:这里主要讲的是区别就是在connect的时候,SGNAL ,SLOT的参数在引用于非引用对效率的影响和参数数据的修改;
2:在线程间参数传递的时候,SGNAL和SLOT位于两个不同的线程,如果connect的链接类型是Qt::QueuedConnection非阻塞运行,SLOT的参数是一般参数,那么SLOT函数的参数就是一个数据copy,
在线程emit SGNAL后,如果线程中作为从参数的数据丢失或改变,但是SLOT函数用因为有数据备份,所以SLOT函数中的参数数据不会受到影响;
当信号与槽没有必要继续保持关联时,我们可以使用disconnect函数来断开连接。其定义如下:
bool QObject::disconnect ( const QObject * sender, const char * signal,
const Object * receiver, const char * member ) [static]
这个函数断开发射者中的信号与接收者中的槽函数之间的关联
- 深入探究connect函数
- 深入探究connect函数
- 深入探究connect函数
- 深入探究connect函数
- 深入探究connect函数
- 深入探究connect函数
- 深入探究connect函数
- 深入探究connect函数
- 深入探究connect函数
- windows实验4-深入探究connect函数
- 深入探究Connect函数(知识点整合)
- 深入探究CONNECT
- 微型技术博客004-深入探究connect函数
- 探究connect函数
- connect函数的探究
- qt中connect函数探究
- 深入探究内联函数
- 深入探究conncet函数
- 2017 计蒜之道 初赛 第六场 微软大楼设计方案(中等)
- Java基础教程3-Java中注释写法
- 用AJAX与后台进行交互
- 七层总结
- 高斯模糊算法
- 深入探究connect函数
- vector的复制
- Shiro的Web项目配置
- Leetcode题解
- ALSA架构简介
- 关键字之标识符
- Oracle——Run as能运行Debug as出错(跟tomcat无关)
- Java中的equals和hashCode方法详解
- 2017 计蒜之道 初赛 第六场