文章目录

  • 1. 事件
    • 1.1 事件的介绍
    • 1.2 事件的处理
  • 2. 按键事件
  • 3. 鼠标事件
  • 4. 定时器
  • 5. 窗口事件

在这里插入图片描述

1. 事件

1.1 事件的介绍

事件是应用程序内部或者外部产生的事情或者动作的统称。
在 Qt 中使用⼀个对象来表示⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。

当用户按下⿏标、键盘,或者是窗⼝需要重新绘制的时候,都会发出⼀个相应的事件。⼀些事件是在⽤⼾操作时发出,如键盘事件、⿏标事件等,另⼀些事件则是由系统本身自动发出,如定时器事件。

常见的 Qt 事件如下:
在这里插入图片描述

注意:事件不像信号槽一样需要关联,而是让当前类,重写某个事件处理函数,通过多态的机制实现

1.2 事件的处理

事件处理⼀般常用的⽅法为:重写相关的 Event 函数。
在 Qt 中,⼏乎所有的 Event 函数都是虚函数,所以可以重新实现。

如:在实现⿏标的进⼊和离开事件时,直接重新实现 enterEvent() 和 leaveEvent() 即可。

enterEvent() 和 leaveEvent() 函数原型如下
在这里插入图片描述

下面我们实现一个鼠标事件

先添加一个类,然后重写enterEvent方法

在这里插入图片描述

将我们创建的Label提升为自己的MyLabel

在这里插入图片描述
此时,当我们的鼠标进入Label,就会显示如下内容
在这里插入图片描述

下面,我们使用事件,实现一个按钮随机移动的案例

在这里插入图片描述

2. 按键事件

Qt 中的按键事件是通过 QKeyEvent 类来实现的。当键盘上的按键被按下或者被释放时,键盘事件便会触发。

在帮助文档中查找 QKeyEvent 类如下:

在这里插入图片描述

其中,键盘上的按键都已在枚举类型Qt::key中罗列出来

在这里插入图片描述

  1. 单个按键

示例:当某个按键被按下时,输出:某个按键被按下了;

在这里插入图片描述

  1. 组合按键

Qt::KeyboardModifier 中定义了在处理键盘事件时对应的修改键。在 Qt 中,键盘事件可以与修改键⼀起使用,以实现⼀些复杂的交互操作。
在这里插入图片描述

在这里插入图片描述

3. 鼠标事件

  1. 鼠标按下事件

在 Qt 中,⿏标按下是通过虚函数 mousePressEvent() 来捕获的。mousePressEvent() 函数原型如下

⿏标左右键及滚的表⽰如下:

  • Qt::LeftButton ⿏标左键
  • Qt::RightButton ⿏标右键
  • Qt::MidButton ⿏标滚轮

在这里插入图片描述

  1. 鼠标释放事件

⿏标释放事件是通过虚函数 mouseReleaseEvent() 来捕获的。mouseReleaseEvent() 函数原型如下

在这里插入图片描述

  1. 鼠标双击事件

⿏标双击事件是通过虚函数:mouseDoubleClickEvent() 来实现的。

  1. 鼠标移动事件

⿏标移动事件是通过虚函数:mouseMoveEvent() 来实现的。同时为了实时捕获⿏标位置信息,需要通过函数 setMouseTracking() 来追踪⿏标的位置

  • 随便移动一下鼠标,就会产生出大量的鼠标移动事件,当你进行捕获事件的时候,尤其是在这里再进行一些复杂逻辑的时候,程序负担就很重,很容易产生卡顿之类的情况。
  • qt为了保证程序的流畅性,默认情况下不会对鼠标移动进行追踪,鼠标移动的时候不会调用mouseMoveEvent。除非显式告诉qt就要追踪鼠标位置(即setMouseTracking() 设置为 true)。
  1. 鼠标滚轮事件

在 Qt 中,⿏标滚轮事件是通过 QWheelEvent 类来实现的。滚轮滑动的距离可以通过 delta() 函数获取

其中返回值代表滚轮滑动的距离。正数表⽰滚轮相对于用户向前滑动,负数表⽰滚轮相对于用户向后滑动。

下面,我们实现一个Ctrl+鼠标滚动,调整字体大小的功能

在这里插入图片描述
在这里插入图片描述

4. 定时器

Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定时器就可以实现。

所谓定时器就是在间隔⼀定时间后,去执⾏某⼀个任务。定时器在很多场景下都会使⽤到,如弹窗⾃动关闭之类的功能等。

Qt中的定时器分为 QTimerEvent 和 QTimer 两个类。

  • QTimerEvent类用来描述⼀个定时器事件。在使用时需要通过 startTimer() 函数来开启⼀个定时器,这个函数需要输⼊⼀个以毫秒为单位的整数作为参数来表明设定的时间,它返回的整型值代表这个定时器。当定时器溢出时(即定时时间到达)就可以在 timerEvent() 函数中获取该定时器的编号来进⾏相关操作。
  • QTimer类 来实现⼀个定时器,它提供了更⾼层次的编程接⼝,如:可以使⽤信号和槽,还可以设置只运行⼀次的定时器。
  1. QTimerEvent 类

示例:在UI界⾯上放置两个 Label 控件,⼀个让其1秒数字累加一次,⼀个让其2秒数字累加⼀次

在这里插入图片描述

  1. QTimer 类

通过QTimer与信号槽,实现按钮点击控制计时的效果。

在UI界⾯放置⼀个 Label 标签,两个按钮,分别是 “开始” 和 “停止”,当点击 “开始” 按钮时,开始每隔1秒计数⼀次,点击 “停⽌” 按钮时,暂停计数。

在这里插入图片描述

  1. 获取系统日期及时间

在 Qt 中,获取系统的⽇期及实时时间可以通过 QTimer 类 和 QDateTime类。

QDateTime类提供了字符串格式的时间。字符串形式的时间输出格式由 toString() ⽅法中的 format 参数列表决定,可⽤的参数列表如下

在这里插入图片描述

在这里插入图片描述

5. 窗口事件

在 Qt 中,可以通过重写 QWidget 的 moveEvent 和 resizeEvent 方法来处理窗口移动和调整大小的事件。这两个事件分别在窗口位置改变和大小改变时被触发。

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88100.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88100.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88100.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32固件升级设计——串口IAP升级(基于YMODEM协议)

目录 一、功能描述 1、BootLoader部分: 2、APP部分: 二、BootLoader程序制作 1、分区定义 2、 主函数 3、YMODEM协议的实现 4、程序跳转 三、APP程序制作 四、工程配置(默认KEIL5) 五、运行测试 结束语 概述 IAP&…

Cookie(搭配domain)/Session(搭配HttpServletRequest+HttpSession)

各位看官,大家早安午安晚安呀~~~如果您觉得这篇文章对您有帮助的话欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦今天我们来学习:Cookie/Session1.Cookie/Session的简述我们在讲解HTTP协议的时候已经讲解过Cookie了HTTP 协议自身是…

240.搜索二维矩阵Ⅱ

纯暴力有点太唐了&#xff0c;不过竟然能过&#xff1b;还有行和列的表示我一直搞反了。。。class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int i 0 ;i<matrix.length;i){for(int j 0 ;j<matrix[0].length;j){if(matrix[i][j]target)…

【计算机组成原理】-CPU章节学习篇—笔记随笔

计算机组成原理 CPU 章节知识点总结&#xff08;适用于 408 考研&#xff09;​ 一、CPU 的功能与基本结构​ 1.1 CPU 的功能​ CPU&#xff08;中央处理器&#xff09;是计算机的核心部件&#xff0c;主要功能包括&#xff1a;​ 指令控制&#xff1a;程序的顺序执行&#xff…

公用测控装置的功能

公用测控装置在电力系统中广泛应用于变电站的高压开关单元、变压器本体及低压侧等对象。它集测量、控制、保护于一体&#xff0c;确保电网的安全、稳定运行。公用测控装置采用高性能硬件架构&#xff0c;如32位微控制器和独立AD采样技术&#xff0c;结合软件算法&#xff0c;实…

数据库|达梦DM数据库配置实例步骤

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 最近因为一个信创项目&#xff0c;要使用达梦DM数据库&#xff0c; 因此安装了达梦DM数据库来学习使用&#xff0c; 上一节中记录了安装Windows版本达梦DM数据库的过程步骤&#xff0c; 这一节紧接着上一节《数据库…

三十一、【高级特性篇】接口用例参数化与关联:实现上下文数据传递

三十一、【高级特性篇】接口用例参数化与关联:实现上下文数据传递 前言准备工作第一部分:后端数据模型调整1. 升级 `TestCase` 模型2. 生成并应用数据库迁移3. 更新 `TestCaseSerializer`第二部分:后端测试执行器强化1. 修改 `execute_api_test_case` 函数2. 修改 Celery 任…

PCA通过“找最大方差方向”实现降维,本质是用更少的变量捕捉原始数据的主要模式

什么事 PCA(主成分分析) PCA(主成分分析)的原理与通俗举例 PCA 是什么? PCA(Principal Component Analysis)是一种常用的降维算法,核心目标是将高维数据映射到低维空间,同时尽可能保留原始数据的关键信息(方差最大的方向)。 核心原理:找“最能代表数据的方向”…

JAVA synchronized关键字涉及的Monitor对象中 EntryList和WaitSet工作机制

在Java的synchronized同步机制中&#xff0c;Monitor对象的EntryList和WaitSet是两个关键队列&#xff0c;它们分别管理不同状态的线程。下面我将详细解释它们的工作原理&#xff0c;并提供代码示例说明。 EntryList&#xff08;锁竞争队列&#xff09; 作用机制 EntryList保…

js-day10

JS学习之旅-day101. 作用域1.1 局部作用域1.2 全局作用域1.3 作用域链1.4 JS垃圾回收机制&#xff08;GC&#xff09;1.5 闭包1.6 变量提升2. 函数进阶2.1 函数提升2.2 函数参数2.3 箭头函数3. 解构赋值3.1 数组解构3.2 对象解构4. 数组遍历4.1 forEach4.2 filter1. 作用域 作…

智能数字式毫秒计在实际生活场景中的应用

在电力领域&#xff0c;SYN5307型数字毫秒表可精准监测特高压变电站断路器合闸时间差&#xff0c;定位继电保护装置信号延迟&#xff1b;工业自动化中&#xff0c;优化汽车焊装线时序、提升半导体晶圆切割良率&#xff1b;科研计量上&#xff0c;助力量子通信同步校准&#xff…

Java面试基础:概念

1. Java的特点跨平台性&#xff1a;Java的 “编写一次&#xff0c;运行无处不在” 是其最大的特点之一。Java编译器将源代码编译成字节码(bytecode)&#xff0c;该字节码可以在任何安装了Java虚拟机(JVM)的系统上运行。面向对象&#xff1a;Java是一门严格的面向对象编程语言&a…

PyQt5高级窗口控件详解:停靠窗口、多文档界面与滚动条

掌握PyQt5的高级窗口控件&#xff0c;让你的GUI应用具备专业级的布局与交互体验 在PyQt5应用开发中&#xff0c;高效管理窗口布局和实现复杂交互功能是提升用户体验的关键。本文将深入解析三个核心高级控件&#xff1a;停靠窗口&#xff08;QDockWidget&#xff09;、多文档界面…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DrawingApp(画板组件)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— DrawingApp组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script setup>…

Eureka、Nacos、LoadBalance、OpenFeign​之间的区别联系和协作 (附代码讲解)

这篇文章聊聊微服务里的这几个老伙计&#xff1a;Eureka、Nacos、LoadBalance、OpenFeign。咱们做微服务开发&#xff0c;总会跟这几个组件打交道&#xff1a;Eureka、Nacos、Spring Cloud LoadBalancer、OpenFeign。它们各司其职又互相配合&#xff0c;今天就把它们的关系、用…

JavaSE-继承

继承&#xff08;inheritance&#xff09;继承的意义我们首先来看下面两个类&#xff1a;public class Dog {public String name;public int age;public void eat(){System.out.println(this.name"正在吃饭");}public void bark(){System.out.println(this.name"…

第二届虚拟现实、图像和信号处理国际学术会议(VRISP 2025)

重要信息 官网&#xff1a;www.icvisp.net 时间&#xff1a;2025年8月1-3日 地点&#xff1a;中国-长沙 简介 近年来&#xff0c;虚拟现实技术取得了显著进步&#xff0c;与5G、云计算和物联网等新一代信息技术的融合加速&#xff0c;推动了其在硬件、软件和内容应用等方面…

SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:整体布局、架构调整(二)

目录 一、前言 二、后端调整 1.实体类调整 2.菜单相关接口 3.用户相关接口 4.新增工具类 5.新增菜单树返回类 6.配置类、拦截器 三、前端调整 1.请求调整 2.页面布局、样式调整 1.user.vue 2.index.vue 3.请求拦截 四、开发过程中的问题 五、附&#xff1a…

vue3官方文档学习心得

这几天抽空把vue3的文档整个看了一遍。简介 | Vue.js 23年写过一个vue2的项目&#xff0c;24年写了一个vue3的项目&#xff0c;页面功能比较简单&#xff0c;用几个简单的API&#xff0c;watch、watchEffect、ref、reactive就能实现的业务功能。 写了几年的react的&#xff0…

Pycharm恢复默认设置,配置导致复制粘贴等不能使用

在file 种找到manage IDE settings在manage IDE settings中找到restore default settings