Qt笔记_信号和槽
2017-10-06 20:02
225 查看
信号和槽
用于两个对象之间的通信。事件发射信号,槽函数响应信号。
通常的做法是子类化部件,然后添加自定义的信号和槽来实现。
信号与槽的关联,可以一对一、一对多、多对一,信号还可以与信号相关联。
类声明最开始处要添加 Q_OBJECT宏。
不支持对模板的使用。
优点:
类型安全,相关联的信号和槽的参数必须匹配。
松耦合。
可以使用任意类型的任意数量的参数。
信号
在类声明中,关键字signals前面不能用public 、protected、private限定符,其默认就是public。信号只能声明,不需要定义。
没有返回值,只能是void类型。
发射信号要使用emit关键字。
槽
* 与普通函数的区别就是可以与信号关联*关联
第一个参数为发射的对象第二个参数为发射的信号
第三个参数为接收信号的对象
第四个参数为要执行的槽或信号
第五个参数为关联方式,默认是Qt::AutoConnection。
涉及带有参数的函数时,只写参数的类型,不能写变量名,多个变量时要一一对应,例如
connect(dlg,SIGNAL(dlgReturn(int)),this,SLOT(showValue(int)));
关联时connect(),函数名字写错,Qt Creator不报错!
这是因为Qt5之前的版本在指定信号和槽时必须使用SIGNAL()和SLOT()宏,最好用新的写法
connect(dlg,&myDialog::dlgReturn,this,&Widget::showValue);
这种写法支持拼写检查!
自动关联
形式:on_objectName _信号名自动关联要在connectSlotsByName()函数之前进行部件的定义,这种方式不明了,不常用。
断开关联
disconnect()函数用法:
1、断开与一个对象所有信号的所有关联
disconnect(myObject,0,0,0);
等价于
myObject->disconnect();
2、断开与一个指定信号的所有关联
disconnect(myObject,SIGNAL(mySignal()),0,0);
等价于
myObject->disconnect(SIGNAL(mySignal()));
3、断开与一个指定的receiver的所有关联
disconnect(myObject,0,myReceiver,0);
等价于
myObject->disconnect(myReceiver);
4、断开一个指定信号和槽的关联
disconnect(myObject,SIGNAL(mySignal()),myReceiver,SLOT(mySlot()));
等价于
myObject->disconnect(SIGNAL(mySignal()),myReceiver,SLOT(mySlot()));
等价于
myObject->disconnect(关联时connect()函数的返回值);
其他
QSignalMapper信号映射器,可以实现对多个相同部件的相同信号进行映射,为其添加字符串或者数值参数,然后发射出去。百分号后面是数字一!!
setText(tr("number is:%1").arg(value))
相关文章推荐
- Qt学习笔记(二) 信号和槽
- 《学习Qt之路2》笔记:QT自定义信号槽
- Qt学习笔记---信号与槽
- 学习笔记之qt4的信号与槽机制
- QT之GUI学习笔记(五)---信号槽
- QT学习笔记 QTimer 与信号 槽
- Qt模块化笔记之core——使用信号与槽
- Qt学习笔记1:信号和槽
- QT入门笔记--信号和槽(附简单的C++类实现代码)
- Qt学习笔记6——信号和槽(上)
- QT学习笔记02信号与槽简介
- Qt学习笔记-启动一个额外的应用程序-获取输入的回车信号
- Qt学习笔记:信号和槽机制
- QT 笔记一(信号与槽)
- qt5视频学习笔记2(自定义槽函数、信号与槽)
- Qt学习笔记-----信号槽
- PyQt5笔记之Qt Designer自定义信号emit及传参
- Qt学习笔记 信号和槽
- QT 的信号与槽机制
- QT openGL 编程 笔记