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版权协议,转载请附上原文出处链接和本声明。