QT---消息机制和事件(3)

目录

一、重写事件分发函数监听按钮

1.事件函数写入头文件

 2.在.cpp中实现事件函数

二、事件过滤器(了解)

1.重写声明函数

2.实现(先判断是否是要过滤事件的组件,如果是是要过滤事件的组件,再去判断事件是否过滤,如果过滤返回true,如果不过滤返回false;如果不是要过滤事件的组件,返回父类的事件过滤函数)

3.安装

4.移除

三、总结


一、重写事件分发函数监听按钮

1.事件函数写入头文件

Event的返回值是bool,不是void,因此使用bool

注意是bool,而非void

 2.在.cpp中实现事件函数

bool Widget::event(QEvent *event)
{
    //判断事件类型(键盘事件)
    if(event->type()==QEvent::KeyPress){
        QKeyEvent *keyEvent= static_cast<QKeyEvent *>(event);//将event类型转变为KeyEvent类型
        if(keyEvent->key()==Qt::Key_Tab){
            qDebug()<<"Tab键被按下";
            return true;//事件处理完毕,返回
        }
    }

    return QWidget::event(event);//跳出当前判断,继续处理其他事件
}

注意事项:

  1. 事件分发函数的返回值bool。
  2. 我们处理过自己感兴趣的事件之后,可以直接返回true,表示我们已经对此事件进行了处理;对于其它我们不关心的事件,则需要调用父类的event()函数继续转发,否则这个组件就只能处理我们定义的事件了。

二、事件过滤器(了解)

1.重写声明函数

2.实现(先判断是否是要过滤事件的组件,如果是是要过滤事件的组件,再去判断事件是否过滤,如果过滤返回true,如果不过滤返回false;如果不是要过滤事件的组件,返回父类的事件过滤函数)

3.安装

void QObject::installEventFilter(QObject *filterObj)

4.移除

void QObject::removeEventFilter(QObject *obj)

三、总结

事件处理有以下四个过程:

  • 事件处理:重写鼠标按下事件、鼠标释放事件,这个是最简单的形式及功能。
  • 事件分发:重新event函数。
  • 事件过滤:重写eventFilter,过滤特定对象的事件,或者所有对象的所有事件(QCoreApplication::instance)。
  • 事件派发:(QcoreApplication::notify)。
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值