QT笔记(1)——信号&槽机制,事件

来源:互联网 发布:淘宝食品备案流程图 编辑:程序博客网 时间:2024/05/17 02:40

1. 信号和槽

Qt的QObject对象有信号函数和槽函数。通过QObject::connect()连接信号和槽,就可以在信号发射的时候自动执行槽函数。

  • 自定义对象要使用i信号和槽的时候需要在类定义中加Q_OBJECT
  • QObject::connect(obj1,SIGNAL(sig()),obj2,SLOT(slot()));中,槽函数和信号函数写的是函数名参数类型
  • 信号可以与信号连接(作用是信号1发送后信号2发送)
  • 发射信号:emit sig();emit tempChanged(temp);

一个典型对象的定义:

class TempConverter:public QObject{    Q_OBJECTpublic:    TempConverter(int tCel, QObject *parent=0);    int tempCel() const;    int tempFahrenheit() const;public slots:    void setTempCel(int);    void setTempFahrenheit(int);signals:    void tempCelChanged(int);    void tempFahrenheitChanged(int);private:    int m_tempCel;};

2. Qt事件

在继承Qt自带类,比如QPushButton等的时候,重新实现事件处理函数会比使用信号方便。

重写事件处理函数的方式:MyObj定义中加

protected:    void mousePressEvent(QMouseEvent* e);

源码中加:

void MyObj::mousePressEvent(QMouseEvent* e){    //....}

应当注意,如果继承了mousePressEvent但是没有手动加上emit click();,那么点击MyObj的时候不会释放click()信号。(这也意味着可以通过实现mousePressEvent控制click()信号发射的条件)。

Event Filter的使用

原创粉丝点击