Qt学习笔记(一)信号和槽

来源:互联网 发布:网络英语电台 编辑:程序博客网 时间:2024/06/11 15:13

    信号和槽是Qt编程的基础,它有点类似MFC的消息映射机制,但远较之简洁和强大。

 

信号和槽的定义与普通的类成员函数定义几乎完全一样,只不过信号和槽的声明需要出现在类声明的特定段中,如下的示例代码所示:

    signals:

    void findNext(const QString& str, Qt::CaseSensitivity cs);

    void findPrevious(const QString& str, Qt::CaseSensitivity cs);

    private slots:

        void findClicked();

void enableFindButton(const QString& text);

  另外,不要忘记在类定义开始处添加Q_OBJECT宏:

  class FindDialog : public QDialog

    {

    Q_OBJECT

    ...

    }

   

信号的发射需要用到emit关键字,如发射上文声明的findNext信号的调用会是这个样子:

    emit findNext("aa", Qt::CaseSensitive);

   

信号和槽的绑定需要用到QObject::connect函数,对它的调用会是如下的样子:

    connect(sender, SIGNAL(signal), receiver, SLOT(slot));

    senderreceiver都是QObject的指针,signalslot是不带参数的函数名。

   

    此外,信号和槽的绑定还有其他的一些情况:

    1.一个信号连接多个槽,在发射这个信号的时候,会以不确定的顺序一个接一个地调用这些槽。

    2.多个信号连接同一个槽,无论发射哪个信号,槽都会被调用。

    3.一个信号连接另外一个信号,但发射第一个信号时,第二个信号也会被发射。

    4.连接可以被移除,通过disconnect调用可以动态移除一个连接。

 

    值得注意的一点是:任何派生于QObject的类都可以使用信号和槽的机制,而并不局限于窗口部件。也就是说完全可以在我们自己的工作类中使用这一机制实现事件监听、动态绑定这样的功能,条件是我们的类派生自QObject