Qt Widget开发学习笔记3:信号与槽

  Qt与其他编程语言或则软件开发套间在线程上的使用上有很大的不同。

  Qt使用了一种叫信号与槽的机制(技术),拓展了程序块之间的事件触发方式。

  一种典型的使用方式是用于子窗口和父窗口的信息传递。假设主窗口W1和它的一个子窗口W2,如果说W2中发生了某件事,而根据逻辑需要改变主窗口的某些属性,一种典型的处理方式是获取父窗口指针进行修改,那如果要修改爷爷窗口呢?如果要修改叔叔窗口呢?这个时候就凸显出信号与槽机制的优势了。

  信号与槽有3个要素,信号、槽函数、连接。

  信号:一种特殊的函数,没有函数实现,只需要定义,定义的区域有要求,需要定义在类的signal区域表示这是一个信号,比如signal:void start();void end(int);。

  槽函数:一种特殊的函数,就是应该做的这件事,是信号的处理函数。同时也可以当做普通函数来使用。需要定义在slots函数区域,表示这是一个槽函数。

  连接:为一个对象的一个信号分配一个对象的一个槽函数,一旦执行了连接操作那信号和槽函数之间就绑定在了一起,发送对象无论在哪里发出这个信号,接收者的响应槽函数就是会被执行。注意绑定是两个对象之间的事情,而不是类之间。格式是connect(发送对象的指针,信号,接收对象的指针,槽函数);如果在前面加dis就变成了接除连接的指令。

  信号和槽的机制可以理解为一种事件的使用,是非常有用的,对于窗口你还可以调用父指针来调整,但是如果是比较基础的类,还用这种方法就得写个新的派生类,非常麻烦。而如果使用信号和槽的机制,一个类只需要定义一些信号行为,至于这个发生了这件事的时候要做什么,我不管,不干我事。而对于槽函数,你那边发生了什么我干嘛要知道,who care?你只要告诉我我应该执行了就行。而它们之间的逻辑关系则由连接函数实现。

  注1:在使用信号和槽函数的时候不需要考虑时间错的问题,当然逻辑上可能发生的时间错还是得自己解决。

注2:信号的使用,在适当的位置emit 信号函数名(参数);emit是发送信号的关键字。

  注3:连接的信号和槽的参数类型和个数需要相同才能进行连接,一般是槽函数迎合信号。

  注4:连接的机制应该是发送者和接收者对象都存在的时候,在需要这个逻辑的时候,越早越好,并且在相应对象被销毁之前应该断开连接。

  注5:连接函数定义在QObject里的,需要其派生类才能使用。

就先写一个简单的例子吧。


我们使用QTimer来展示信号和槽的机制,顺便学习QTimer的使用。

  QTimer是Qt定义的计时器类型。

  核心的函数有3个QTimer::start(int);QTimer::stop():QTimer::timeout();timeout函数为信号。



设计一个时钟类,利用QTimer计时,链接timer的timeout信号和whenTimeOut函数。当timer使用start函数以后会以你传递的数值为间隔重复产生timeout信号。


然后再窗口类中添加好刚刚写好的Clock类变量,定义槽函数等等。


添加好实现,在构造的时候启动计时器,然后将它画在窗口中。


刚刚的链接函数的信号和槽的传递使用了两种写法:

第一种:使用关键字 SIGNAL   和   SLOT对函数进行转化;

第二种:使用&,格式为&类名::信号名,注意信号名就行,不带括号。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,085评论 1 32
  • 1、概述 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检...
    你的社交帐号昵阅读 45,239评论 0 9
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,095评论 0 3
  • 千座山峦没有一只鸟儿飞过,万条路径无一人踪影。 穿着蓑衣戴着斗笠的渔翁,却独钓寒江。 渔翁在如此孤绝寂寞的环境下“...
    魔羽文林阅读 1,036评论 15 17
  • 自从看了《城市猎人》后,感觉韩国演员动作戏不够,没有拳拳到肉的感觉,后来也就很少再看韩国电影或连续剧了。这周刚好...
    双木_ly阅读 277评论 0 2