事件是一个从QEvent类继承而来的对象,任何从QObject类派生的对象均可通过QObject::event()方法
接收事件,event()函数自身并不处理事件,而是根据事件类型调用响应的事件处理器。例如,QWidget
类中的event()函数实现将鼠标、键盘、重绘等常见事件交给mousePressEvent()、keyPressEvent()、
paintEvent()这些特定的事件处理器进行处理。事件可以被传递。
Qt中处理事件的5中方式:
1、重新实现特定的事件处理器:如mousePressEvent()、keyPressEvent()、paintEvent()
2、重新实现QObject::event()函数
3、在QObject中注册事件过滤器:
如果对象使用installEventFilter()函数注册了事件过滤器,目标对象中的所有事件将首先发给这个
监视对象的eventFilter()函数。
4、在QApplication中注册事件过滤器
5、继承QApplication并重新实现notify()函数:可同时有多个事件过滤器,而notify()函数只有一个
若Qt没有为某个特定事件提供默认的事件处理器,或者提供的默认事件处理器无法满足用户需求,可以
通过重新实现QObject::event()函数来处理:
bool MyWidget::event(QEvent* event){
if(event->type() == QEvent::KeyPress){
QKeyEvent *k = static_cast<QKeyEvent*>(event);
if(i->key() == Qt::Key_Tab){
//处理Tab键缩进
return true;
}
}else if(event->type() == MyCustomEventType){
//同上
}
return QWidget::event(event); //交给父类处理
}
eg:
void DrawArea::resizeEvent(QResizeEvent* event){
if(width() > image.width() || height() > image.height()){
int newWidth = qMax(width()+128,image.width());
int newHeight
接收事件,event()函数自身并不处理事件,而是根据事件类型调用响应的事件处理器。例如,QWidget
类中的event()函数实现将鼠标、键盘、重绘等常见事件交给mousePressEvent()、keyPressEvent()、
paintEvent()这些特定的事件处理器进行处理。事件可以被传递。
Qt中处理事件的5中方式:
1、重新实现特定的事件处理器:如mousePressEvent()、keyPressEvent()、paintEvent()
2、重新实现QObject::event()函数
3、在QObject中注册事件过滤器:
如果对象使用installEventFilter()函数注册了事件过滤器,目标对象中的所有事件将首先发给这个
监视对象的eventFilter()函数。
4、在QApplication中注册事件过滤器
5、继承QApplication并重新实现notify()函数:可同时有多个事件过滤器,而notify()函数只有一个
若Qt没有为某个特定事件提供默认的事件处理器,或者提供的默认事件处理器无法满足用户需求,可以
通过重新实现QObject::event()函数来处理:
bool MyWidget::event(QEvent* event){
if(event->type() == QEvent::KeyPress){
QKeyEvent *k = static_cast<QKeyEvent*>(event);
if(i->key() == Qt::Key_Tab){
//处理Tab键缩进
return true;
}
}else if(event->type() == MyCustomEventType){
//同上
}
return QWidget::event(event); //交给父类处理
}
eg:
void DrawArea::resizeEvent(QResizeEvent* event){
if(width() > image.width() || height() > image.height()){
int newWidth = qMax(width()+128,image.width());
int newHeight