Qt:事件处理

本文介绍了Qt中的事件处理机制,包括重新实现特定事件处理器、重写QObject::event()、注册事件过滤器、在QApplication中注册事件过滤器以及继承QApplication重写notify()。通过示例代码展示了resizeEvent、showEvent、timerEvent等事件的处理,并详细解释了如何安装和使用事件过滤器,以及在处理耗时操作时如何保持用户界面响应性。
摘要由CSDN通过智能技术生成
事件是一个从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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值