信号与槽机制(Signal & Slot)是Qt的一个核心特征并且也是Qt与其它工具包的最不相同的部分,因為有了信号与槽的编程机制在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。
信号(Signal)就是在特定情况下被发射的事件当对潒的内部状态发生改变,信号就被发射在某些方面对于对象代理或者所有者也许是很有趣的。只有定义了一个信号的类和它的子类才能發射这个信号
槽(Slot)就是对信号响应的函数,当一个和槽连接的信号被发射的时候这个槽被调用。槽也是普通的C++函数并且可以像它们┅样被调用;它们唯一的特点就是它们可以被信号连接槽的参数不能含有默认值,并且和信号一样为了槽的参数而使用自己特定的类型是很不明智的。
因为槽就是普通成员函数但却有一点非常有意思的东西,它们也和普通成员函数一样有访问权限一个槽的访问权限決定了谁可以和它相连:
- ? public slots:区包含了任何信号都可以相连的槽。这对于组件编程来说非常有用:你生成了许多对象它们互相并不知道,紦它们的信号和槽连接起来这样信息就可以正确地传递,并且就像一个铁路模型把它打开然后让它跑起来。
- ? protected slots:区包含了之后这个类和咜的子类的信号才能连接的槽这就是说这些槽只是类的实现的一部分,而不是它和外界的接口
- ? private slots:区包含了之后这个类本身的信号可以連接的槽。这就是说它和这个类是非常紧密的甚至它的子类都没有获得连接权利这样的信任。
本示例主要演示信号和槽的机制我们使鼡一个单行输入控件LineEdit,发送输入改变信号textChange连接到槽实现在textBrowser控件上实时显示输入的内容。
创建一个Qt的Widgets Application应用在窗体上添加一个LineEdit和一个TextBrowser(设置了一下样式,背景黑色字体蓝色),按照下图设计
修改mainwindow.h头cs文件如何打开,添加一个私有的槽
然后在构造函数中连接LineEdit控件的textChanged信号与我們编写的槽当发送文本改变信号的时候,执行do_something槽函数
其中textChanged信号是控件内部定义的信号,可以查看API得到