浅析QT入门之信号与槽机制
2016-02-02贺志朋
贺志朋
(苏州健雄职业技术学院,江苏 苏州 215411)
浅析QT入门之信号与槽机制
贺志朋
(苏州健雄职业技术学院,江苏 苏州 215411)
QT是一个跨平台的C++ GUI应用构架,信号与槽机制是其核心机制。要精通QT编程的前提就是就对信号和槽有所了解。本文对QT里信号与槽机制最常见的三种应用方式做了分析,指出它们在应用中的不同之处,便于我们加深对QT的信号与槽机制的理解。
信号;槽;QT
1 基本概念
1.1 信号
一个对象要发射某个信号,只有当此信号的内部状态发生改变时才会被发射。同时能够发射这个信号的对象必须是定义过这个信号的类及其派生类。当发射一个信号时,将立刻执行和此信号相关联的槽,和调用一个正常函数一样。任何 GUI 事件循环完全独立于信号与槽机制之外。发射函数(emit)是等所有的槽返回以后才返回。 如果某个信号和多个槽相关联,当发射这个信号时,将依次地去执行这些槽,但执行这些的顺序将是不确定的、随机的。在头文件里进行信号的声明的,当信号声明区指出已进入了QT的signals关键字,自己的信号随后即可被声明。
1.2 槽
C++普通成员函数之一就是槽,可以正常调用槽,多种信号可以与槽相关联是槽的唯一特殊性。当发射与槽关联的信号时,就会调用该槽。槽能带参数,但是属于槽的参数不能缺省。槽属于普通成员函数的一员,它们也有存取权限。是否能够与其相关联取决于槽的存取权限。槽函数也分为三种类型,即protected slots、public slots 和private slots。最后进行槽的声明也是在头文件中。
2 信号与槽的三种应用方式
以单击窗口上的一个按钮要弹出一个对话框为例:
把新建QT项目的常规流程完成以后,如果想实现点击按钮弹出对话框的效果,可以先在头文件的类声明中进行槽声明,见图1,然后到源文件中进行糟定义,见图2。最后在构造函数里进行信号与槽的链接,见图3.
把新建QT项目的常规流程完成以后,可以先在设计视图下选中按钮进行相应的转槽处理,见图4,然后到自动生成的槽函数中进行槽定义即可。见图2。.
把新建QT项目的常规流程完成以后,可以先在设计视图下单击设计器上方的“编辑信号与槽”图标,进入部件的信号和槽的编辑模式再进行相应的操作即可,见图5。
3 总结
本文主要阐述了QT中信号与槽应用的三种方式,第一种方式需要进行槽声明,定义槽的实现并把信号和槽进行关联,这种方式稍显繁琐,但便于理解,适合初学者使用;第二种方式直接对部件进行转槽处理,自动添加槽声明、生成槽定义实现函数并自动进行信号与槽的链接,只需添加槽实现代码即可,这种方式操作简单,但不好理解其具体内涵,适合对QT有一定研究者使用;第三种方式是在设计器中进行,这个与手写函数是一样的,它用的也是自动关联,也会自动添加槽声明。通过这三种方式的比较,我们对QT的核心机制:信号与槽机制有一个整体把握,借此为对QT的进一步学习研究打下一个良好的基础。
[1]霍亚飞.QT Creator 快速入门[M].4版.北京.北京航天航空大学出版社,2016 .
[2]AP Witkin.Space-scale filtering[C].In Proc.Of IJCAI, 1983:1019-1021.
[3]J Koenderink.The structure of image [J].Biological Cybern ation,1984,50(06):363-370.
[4]P Perona and J Malik.Scale-Space and edge detection using anisotropic diffusion [J].IEEE Trans.PAMI,1990,12(07):629-639.
10.16640/j.cnki.37-1222/t.2016.22.122