Qt的QObject对象有信号函数和槽函数。通过QObject::connect()连接信号和槽,就可以在信号发射的时候自动执行槽函数。
自定义对象要使用i信号和槽的时候需要在类定义中加Q_OBJECTQObject::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; };在继承Qt自带类,比如QPushButton等的时候,重新实现事件处理函数会比使用信号方便。
重写事件处理函数的方式:MyObj定义中加
protected: void mousePressEvent(QMouseEvent* e);源码中加:
void MyObj::mousePressEvent(QMouseEvent* e){ //.... }应当注意,如果继承了mousePressEvent但是没有手动加上emit click();,那么点击MyObj的时候不会释放click()信号。(这也意味着可以通过实现mousePressEvent控制click()信号发射的条件)。