当前位置: 首页 > article >正文

【QT:QT事件】

目录

事件概念:

事件处理:

事件的处理方式:

处理鼠标进入和离开事件:

鼠标事件:

鼠标按下事件:

鼠标释放事件:

鼠标双击事件:

键盘事件:

处理按键事件 

定时器: 


事件概念:

事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件,所有的QT事件均继承与抽象类QEvent,事件是由系统或者Qt平台本身在不同的时刻发出的。用户进行的各种操作会产生事件,程序员给事件关联上处理函数,当事件触发时就能够执行到对应的代码。

事件本身是操作系统提供的机制,QT把这种机制进行了封装,但对于事件对应的代码书写并不方便,于是Qt对事件机制进行了进一步的封装,这就是信号槽。信号槽就是对事件的进一步封装,事件就是信号槽的底层机制

事件处理:

通俗来讲就是将代码和事件关联起来,当事件触发就到指定的代码中执行处理 。

事件的处理方式:

  • 让当前类重写某个事件处理函数(多态机制,创建子类继承Qt已有的类,在子类中重写父类的事件处理函数,通过多态机制,执行重写的子类函数)

处理鼠标进入和离开事件:

 

这里虽然重写了这两个函数,但是事件却没有得到处理,原因是当前在界面上创建的label其实是QLabel而不是自定义写的label,必须要确保界面上的label是自定义的那个类才可以。那么如何将Label转为自定义的label?点到图形化界面后,将界面的QLabel鼠标右击,点击提升为...将需要转换的类添加上去即可

鼠标事件:

鼠标按下事件:

通过事件获取鼠标点击的位置

mousePressEvent函数按下左右,滚轮都可以触发

鼠标释放事件:

鼠标双击事件:

以上操作都是在自定义的Label中完成的,此时鼠标只有在Label范围内进行动作时才会捕捉到,以上操作也可放在Widget中完成,那么鼠标的在整个窗口的各个动作都能捕获到。

此外,鼠标移动不同于鼠标按下,鼠标移动当鼠标随便移动就可以产生大量事件,当进行事件捕获时进行一些复杂的逻辑时,程序的负担就会很重容易产生卡顿,因为Qt为了保证鼠标的流畅,默认情况下不会对鼠标位置进行追踪,追踪鼠标位置需要手动调用(方法为:setMouseTacking) 

键盘事件:

处理按键事件 

捕获键盘按键方法:keyPressEvent(QKeyEvent*)

定时器: 

QTimer实现定时器功能,而QTimer基于QTimeEvent支撑的

定时器的方法
startTimer启动定时器
KiilTimer关闭定时器

使用timerEvent比QTimer复杂,手动管理timerId,此外还需要区分该函数是由那个Timer引起的

窗口移动和大小改变事件:
 

事件
moveEevent窗口移动时触发的事件
resizeEvent窗口大小改变时触发的事件

 

 


http://www.kler.cn/a/593356.html

相关文章:

  • RabbitMQ可靠性进制
  • 汽车安全确认等级-中国等保
  • 【Go语言圣经3.6】
  • numpy学习笔记10:arr *= 2向量化操作性能优化
  • 知识蒸馏(Knowledge Distillation)
  • element-ui image 组件源码分享
  • DApp开发需要多少钱?全面解析DApp开发成本
  • 麒麟银河V10服务器RabbitMQ安装
  • Android Shell上执行可执行文件报错:Permission denied
  • Qt窗口控件之颜色对话框QColorDialog
  • 什么是Apache Avro?
  • ubuntu高并发内核参数调优 - (压测客户端调优)
  • Elasticsearch:使用 ColPali 进行复杂文档搜索 - 第 1 部分 - 8.18
  • 解锁 AI 开发的无限可能:邀请您加入 coze-sharp 开源项目
  • Nginx 日志格式
  • docker利用ollama +Open WebGUI在本地搭建部署一套Deepseek-r1模型
  • uniapp路由跳转导致页面堆积问题
  • 涨薪技术|Kubernetes(k8s)之Pod端口设置及资源配额
  • 蓝桥杯 之 拔河(2024年C/C++ B组 H题)
  • Leetcode 50.Pow(x,n) 使用快速幂求解