[QT开发 10_事件]

知识点1:事件概述

事件经过以下事件派发--->事件过滤器------>事件分发------>事件处理四个阶段

事件系统或 Q t 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,说是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户做出操作做出响应时发出,如键盘事件,另一些事件则是由系统自动发出,如计时器事件。

在前面我们也曾经简单提到,Q t 程序需要在main()函数创建一个QApplication对象,然后调用,它的exec()函数,这个函数就开始QT的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序事件。当事件发生时,QT将创建一个事件对象,QT中所有事件类都继承于QEvent。在事件对象创建完毕后,Qt将这个事件对象传递给QObject的even()函数(事件分发函数)。event函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(event handler),关于这一点,后面会详细说明。

在所有组件的父类QWidget中,定义了很多事件处理的回调函数,如

 事件循环开始:exec()函数是事件循环的开始。

知识点2:常见事件函数

 帮助文档:

知识点3:重写窗口关闭,窗口重新设置大小事件

上面介绍的常用函数中关键词 virtual 是虚函数的意思。虚函数是可以被重载的。

步骤1:新增一个类继承于QWidget(新建工程 )。

步骤2:子类声明重写的事件函数

protected:
    void closeEvent(QCloseEvent*event);
    void resizeEvent(QResizeEvent*event);

步骤3:在子类的.cpp去实现事件函数。

void Widget::closeEvent(QCloseEvent *event)
{
    int ret=QMessageBox::question(this,"提示","您确定要关闭窗口吗?");
    if(ret==QMessageBox::Yes){
        event->accept();
    }
    else {
        event->ignore();
    }
}

void Widget::resizeEvent(QResizeEvent *event)
{
    qDebug()<<"oldsize="<<event->oldSize();
    qDebug()<<"newsize="<<event->size();
}

知识点4:鼠标按下,释放,移动事件

步骤1:新建label类继承QLabel(新建工程,ui绘制label,新增C++类QWiget,代码修改继承QLabel,ui绘制label提升新创建label类)

步骤2:查看帮助文档

步骤3:在mylabel.h声明事件函数

步骤4:在mylabel.cpp实现事件函数

知识点5:重写事件分发函数(了解)

案例:键盘事件:监听tab按键

步骤1:.h声明event

步骤2:.cpp实现event函数

注意:

1、事件分发函数的返回值bool。

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

知识点6:事件过滤器(了解)

有时候,对象需要查看、甚至要拦截发送到另外对象的事件。例如,对话框可能想要拦截按键事件,不让别的组件接收到;或者要修改回车建的默认处理。

-------------------------------------------------------------------------------------------------------------------------------

使用:重写

步骤1:声明

virtual bool QObject::eventFilter(QObject*watched,QEvent*event);

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

步骤3:安装

void QObject::installEventFilter(QObject*filterObj)

步骤4:移除

void QObject::removeEventFilter (QObject*filterObj)

知识点7:事件总结

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

事件处理:重写鼠标按下事件、鼠标释放事件,这个是最简单的形式及功能。

事件分发:重写event函数。event函数是所有对象的事件的入口。

事件过滤:重写eventFiler,过滤特定对象的事件,或者所有对象的所有事件(QCoreApplicaton::instance)。

事件派发:(QCoreApplication::notify)

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值