Signals and Slots

 
Signal和slots被用于对象之间的通信,它们是Qt重要的特性,大概这部分也是跟其他开发平台最主要的不同...

Signals and Slots
Signal和slots被用于对象之间的通信,它们是Qt重要的特性,大概这部分也是跟其他开发平台最主要的不同。
1 。绪论
2 。Signals and Slots
3 。一个简单的例子
4 。编译这个例子
5 。Signals
6 。slots
7 。 Meta-Object 信息
8 。一个真正的例子
绪论
在GUI编程中,当我们改变一个小部件,我们通常会用其它的部件去发出消息。更加
普遍的是,我们想各种不同的对象之间能通讯。举个例子,如果用户点击“close”按钮我们大概想窗体的close()函数被调用。

旧的工具包利用回调函数,完成各种通讯。一个回调函数是一个指针指向的函数,因此如果你想调用一个函数去处理某一个事件,你必须通过别的函数的指针去调用函数。如果这个处理函数被调用,当合适的时候。回调函数有两个基本的缺点。首先它们没有类型安全,我们不能确定调用的回调函数的参数。第二,回调函数被紧密地联结到处理函数,应为处理函数必需之知道那个回调函数调用的。
Signals and Slots
在Qt中,我们有一个可供选择回调的办法:我们使用signals和slots。一个信号被发射出去当特定的事件发生时。Qt的部件有很多事先设定好了的消息,但是我们常常为我们的子类添加自己的消息到它们里面。一个solts是一个函数,它被特定的的消息调用,Qt‘s部件有很多已经定义好的solts,但是它们通常用于子类和增加你自己的
solts所以你能运用你所感兴趣的。

signals和slots机制是类型安全的:signal 的签名必需匹配接受的slot的签名。
(事实上, 一个slot可能有一个更短的消息,比他接受到的。因为它能忽视额外的
参数)这样一来信号被兼容,编译器能帮助我们发现类型不匹配。Signals和slots 松散的联系着。一个类,它发射一个信号即不知道那个solts接收的。Qt的signals和slots的机制确保了如果你连接一个信号和一个槽,这个槽将被调用在发出
信号的时候。信号和槽能带任意类型和任意个的参数,它们类型十分安全。

所有的类都是继承QObject 或者是继承自它的子类,都能包含signals和solts。对象的信号被发出当它稍稍改变它们状态时。//*可能对别的对象有兴趣。这样所有的对象就可以通信了,发射出去的信号是否被接收我们并不知道和关心。信息被封装是真的,确保对象作为软件的组成部分能够被使用。

Slot能被用于接收signals,但是它们也是普通的成员函数,作为对象它不知道任何事件接收到这样的signals 也不知道任何的signal连接到slots它。她确保了真正不受约束的组成部分被创建。

你可以连接很多的信号连接一个信号槽,也可以一个信号被连接到很多的信号槽中
一个信号连接到别的信号也是可能的。
总的说来,signals和slots建立起了强大的设计机制。

一个很小的c++ 类的声明可能会是这样的 :
A Small Example
    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;
    };

你可能感兴趣的:(Class,qt,平台,编译器,Signal,通讯)