每日一言
成长是一场孤独的旅行,但终点的风景会治愈所有疲惫。
QT事件
讲实话我就通过我学完事件我有自己简单的看法,就是我们的事件的话都在这边了,基本上是包括什么鼠标事件、键盘事件、各种事件,但是这些事件都是已经被QT官方定义好的,也就是我们不能自己去创建一个没有的事件
就像这边,我们的事件都是在QWidget类里面全部都在这里了,而且我们要知道事件是protected属性的
那么事件有什么作用呢??
其实事件的引入也就是为了让我们重写时间,完成一些默认没有的操作,丰富我们的功能的效果,就比如我们的鼠标点击的时候,默认情况下是不会显示任何其他效果的,但是我们重写鼠标点击事件的话,那么我们就可以让原有的变得不一样,比如现在变成点击的时候控制台输出字母ABC,或者是各种不同的效果,这个就是重写事件的好处,以及我们对引入事件这个概念的原因
那么我们要怎么重写事件呢?
我再这边重写了5个事件,知道为什么可以重写吗,因为事件都是虚函数
那么我们需要在这个Widget.h这边先重写定义,然后我们可以光标放在函数上面,ALT+ENter这样就可以快捷的选择在widget.cpp中添加实现
我这个5个事件分别叫做 关闭事件、窗口大小变化事件、鼠标进入窗口的事件、鼠标离开窗口事件、滚轮事件
这个就是我重写后添加的一些功能,在关闭事件里面,我添加了一个弹窗,这个
也就是我们看到的正常的软件都会有的操作,然后这个event->acept 和这个event->ignore是什么意思呢
- accept() → “允许关门”:事件被接受,门会关闭(执行关闭逻辑)。
- ignore() → “拒绝关门”:事件被忽略,门保持打开(不执行关闭逻辑)。
等于是我们点击这个yes就会关闭,no就不会关闭,在内部实现为yes的时候接受事件,执行关闭的逻辑,no为不接受事件,不执行关闭
然而我们是不是会研究为什么会关闭,我也没有实现关闭啊,就是不懂因为:
窗口关闭的具体操作(如销毁窗口、释放资源)是 Qt 内部预先实现的默认逻辑。accept() 和 ignore() 的作用是 “授权” 或 “拒绝” Qt 执行这个默认逻辑 —— 这也是框架设计的便利性所在:开发者不需要重复编写通用功能,只需要通过简单的接口控制流程即可。
resizeEvent这个事件就是我们拉动窗口的时候,会出现一些数据,那么我们默认是不捕获的,那么我们可以去捕获一下
所以我们找到这个内部的方法,有个叫做oldsize和size这两个函数,这个是什么意思呢就我直接上代码
这个size就是返回新的窗口的数据,也就可以看作为窗口的长和宽了,这个oldsize就是上一次的数据,size是最新数据
接下来值的讲的就是这个滚轮事件,当我们不懂滚轮事件能干嘛的时候,我们就可以找到这个类里面有很多的方法,这边就有一个方法很好用
我们会发现有个angleDelta这个函数是用于反馈滚轮的,当我滚轮往上滚那么就返回120,往下滚就返回-120,
对吧当然这边也有一个x()和y()是专门返回QPoint类型的x的数和y的数的
另外几个事件就不值得讲了,因为都看得懂,面向对象的好处就是程序员的命名会可读性很高,很容易理解这个函数的大概信息是什么。