文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Qt信号槽机制初探

Qt信号槽机制初探

时间:2011-04-16  来源:seansevn

class Counter
 {
 public:
     Counter() { m_value = 0; }

     int value() const { return m_value; }
     void setValue(int value);

 private:
     int m_value;
 };A small QObject-based class might read:

 #include <QObject>

 class Counter : public QObject
 {
     Q_OBJECT

 public:
     Counter() { m_value = 0; }

     int value() const { return m_value; }

 public slots:
     void setValue(int value);

 signals:
     void valueChanged(int newValue);

 private:
     int m_value;
 };
信号和槽

信号和槽用于对象之间的通信。信号槽机制是Qt的核心特性,并且很大程度上是区别去其他区别于其他框架提供的特性。

简介:

在GUI编程中,当一个widget改变,我们经常希望另外的widget被告知。更普遍地,我们希望任何的对象都可以互相通信。比如,如果用户点击close按钮,我们大多希望调用窗口的close()方法。

以前的工具集通过callback来实现这种通信。callback是指向函数的指针,因此,若果你想让处理函数通知你某些事件,你可以传递给另一个函数一个指针来处理函数。处理函数

在适当的时候调用callback。Callbacks有两种根本的缺陷:第一,它们不是类型安全的,我们无法确定处理程序会调用正确参数的回调函数(callback)。第二,回调函数耦合于处理函数,因为处理函数必须知道去调用哪个回调函数。

信号和槽:

Qt提供了回调的替代技术:我们使用信号和槽。当特定事件发生时发出信号。Qt的widget有许多预定义的信号,但是我们可以为widget子类添加我们自定义的信号。槽是回应特定的信号时所调用的方法。Qt的窗口部件有许多预定义的槽,但是我们也可以为窗口部件的子类田间我们自定义的槽,以处理我们感兴趣的信号。

信号槽机制是类型安全的:信号的签名必须跟接受的槽的签名相匹配(事实上,槽的签名可以比信号的签名短,因为它可以忽略额外的字段)。因为签名是相容的,编译器就可以帮我们检测类型的不匹配。信号和槽是松耦合的:一个类产生一个信号,并不知道而且不关心那个槽接受该信号。Qt的信号槽机制保证,如果你连接了一对信号槽,槽会在适当的时间带着信号的参数被调用。信号和槽可以附带任何类型任何数量的参数。信号和槽是完全类型安全的。

所有的从QObject类继承的类或者说它的子类(比如,QWidget)可以包含信号槽。当对象改变状态的时候,可以以其他对象可能感兴趣的方式产生信号。这就是所有的对象通信的方式。它不知道也不关心时候有对象接受它产生的信号。这是真正的信息封装,保证对象可以用作软件的组成部分。

槽可以用来接受信号,不过槽也是普通的成员函数。类似于对象不知道谁接受它的信号,槽也不知道是否有信号连接自己。这保证了Qt可以创建完全独立的组件。

一个信号可以连接无数的槽,并且一个槽可以连接你想要连接的信号。甚至可以直接连接两个信号(当第一个信号产生,立即产生第二个信号)。

信号和槽一起形成了一种强大的组件编程机制。

一个简单的例子:


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载