注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[Qt笔记]信号和槽机制  

2011-09-11 12:22:05|  分类: QT |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

目录

        “信号-槽”机制是QT程序的基本原理,它使得程序员可以绑定一些根本不相干的控件。

        槽和普通的C++成员函数很像,可以是虚函数(virtual),也可以被重载(overload),可以是私有(private)的,共有(public)的或是受保护(protected)的,它们可以象任何C++成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和一个信号相连接,只要信号发出了,这个槽函数就会自动被调用。

 connect()函数语法如下:

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

        sender和receiver是QObject对象指针,signal和slot是不带参数的函数原型。SIGNAL()和SLOT()宏的作用是把他们转换成字符串。

        实际使用中还有考虑如下一些规则:

1. 一个信号可以连接多个槽:

connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));

connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));

2. 多个信号可以连接到一个槽

connect(lcd,SIGNAL(voerflow()),this,SLOT(handleMathError()));

connect(calculator,SIGNAL(divisionByZero()),this,SLOT(handleMathError()));

        任何一个信号发出,槽函数都会执行。

3. 一个信号可以和另一个信号连接

connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SIGNAL(updateRecord(const QString &)));

        第一个信号发出后,第二个信号也同时发送。除此之外,信号和信号连接上和信号和槽连接相同。

4. 连接可以被删除

disconnect(lcd,SIGNAL(voerflow()),this,SLOT(handleMathError()));

        信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接:

connect(ftp,SINGAL(rawCommandReply(int,const QString &)),this,SLOT(processReply(int,const QString &)));

        如果信号里的参数个数多于槽函数的参数,多余的参数被忽略:

connect(ftp,SINGAL(rawCommandReply(int,const QString &)),this,SLOT(checkErrorCode(int)));

        如果参数类型不匹配,或者信号和槽不存在,在debug状态时,Qt会在运行期间给出警告。如果信号和槽连接时包含了参数的名字,Qt将会给出警告。如下所示,当出现参数类型不匹配时,
QObject::connect(lineEdit, SIGNAL(textChanged(QString)), Dialog, SLOT(enableFindButton()));
        会出现如下提示信息:
Object::connect: No such slot Dialog::enableFindButton() in ui_dialog.h:118
Object::connect:  (sender name:   'lineEdit')
Object::connect:  (receiver name: 'Dialog')

  评论这张
 
阅读(1491)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017