信号和槽
来源:互联网 发布:java按键监听器 编辑:程序博客网 时间:2024/05/29 09:40
一. 信号(signal)
当对象的状态发生改变时,信号被某一个对象发射(emit),只有定义过这个信号的类或者其派生类能够发射这个信号。
当一个信号被发射时,与其相关联的槽将被执行,就象一个正常的函数调用一样。
信号-槽机制独立于任何GUI 事件循环。只有当所有的槽正确返回以后,发射函数(emit)才返回。
如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地被执行,但是它们执行的顺序将会是不确定的,并且我们不能指定它们执行的顺序。
注意,信号和槽函数的声明一般位于头文件中,同时在类声明的开始位置必须加上Q_OBJECT 语句,这条语句是不可缺少的,它将告诉编译器在编译之前必须先应用moc 工具
进行扩展。关键字signals 指出随后开始信号的声明,这里signals 用的是复数形式而非单数,siganls 没有public、private、protected 等属性,这点不同于slots。另外,signals、slots 关键字是QT 自己定义的,不是C++中的关键字。
还有,信号的声明类似于函数的声明而非变量的声明,左边要有类型,右边要有括号,如果要向槽中传递参数的话,在括号中指定每个形式参数的类型,当然,形式参数的个
数可以多于一个。
从形式上讲,信号的声明与普通的C++函数是一样的,但是信号没有定义函数实现。另外,信号的返回类型都是 void,而C++函数的返回值可以有丰富的类型。
二. 槽(slot)
槽是普通的C++成员函数,可以被正常调用,不同之处是它们可以与信号( signal)相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。
槽也和普通成员函数一样有访问权限。槽的访问权限决定了谁可以和它相连。通常,槽也分为三种类型,即public slots、private slots 和protected slots。
此外,槽也能够声明为虚函数。
三. 信号与槽的关联
槽和普通的C++成员函数几乎是一样的-可以是虚函数;可以被重载;可以是共有的、保护的或是私有的,并且也可以被其它C++成员函数直接调用;还有,它们的参数可以是任意类型。唯一不同的是:槽还可以和信号连接在一起,在这种情况下,每当发射这个信号的时候,就会自动调用这个槽。
connect() 语句看起来会是如下的样子:
connect(sender,SIGNAL(signal),receiver,SLOT(slot));
(1) 一个信号可以连接多个槽
connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));
connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));
在发射这个信号的时候,会以不确定的顺序一个接一个的调用这些槽。
(2)多个信号可以连接同一个槽
(3)一个信号可以与另外一个信号相连接
connect(lineEdit,SIGNAL(textChanged(const Qstring &)),this,SIGNAL(updateRecord(const Qstring &)));
(4)连接可以被移除
disconnect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));
(5)要把信号成功连接到槽(或者连接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型
connect(ftp,SIGNAL(rawCommandReply(int,const QString &)),this,SLOT(processReply(int,const QString &)));
(6)如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被简单的忽略掉
connect(ftp,SIGNAL(rawCommandReply(int,const Qstring &)),this,SLOT(checkErrorCode(int)));
- QT的信号和信号槽
- 信号和槽
- 信号和槽机制
- 信号和槽
- Qt信号和槽
- QT信号和槽
- 信号和槽-Pyqt
- QT信号和槽
- 信号和槽
- 信号和槽
- 信号和槽
- QT 信号和槽
- Qt ---- 信号和槽
- QT信号和槽
- QT--信号和槽
- QT 信号和槽
- 【转载】信号和槽
- 信号和槽
- hdu 1428 漫步校园 (最短路+记忆化搜索)
- capset capget 设置和获得进程权限
- socket编程中的SIGPIPE信号
- UVA 1078 - Steam Roller(最短路)
- 数据结构 第一章 绪论
- 信号和槽
- linux 查看文件内容的命令
- Emacs-2-导航
- uva1494 - Qin Shi Huang's National Road System 次小生成树
- Java的进程与线程
- hdu1358 Period
- 最简实例说明wait、notify、notifyAll的使用方法
- E-R图示例(学校管理系统)
- 属性图- 例子