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

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_OBJECT
public:
    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的使用


版权声明:本文为sinat_35539699原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。