【QT】——事件处理系统

news2024/9/22 10:05:40

目录

1.事件介绍

2.QT事件的产生

3.事件处理函数

3.1鼠标事件

3.2键盘事件

3.3窗口重绘事件

3.4窗口关闭事件

3.5窗口大小变化事件

4. 重写事件处理函数


1.事件介绍

QT 程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。QT 事件的发生和处理 成为程序运行的主线,存在于程序整个生命周期。

常见的 QT 事件类型如下:

  • 键盘事件: 按键按下和松开
  • 鼠标事件: 鼠标移动,鼠标按键的按下和松开
  • 拖放事件: 用鼠标进行拖放
  • 滚轮事件: 鼠标滚轮滚动
  • 绘屏事件: 重绘屏幕的某些部分
  • 定时事件: 定时器到时,比如设定一个定时器,定时器到时,则触发定时事件
  • 焦点事件: 键盘焦点移动
  • 进入和离开事件: 鼠标移入 widget 之内,或是移出
  • 移动事件: widget 的位置改变
  • 大小改变事件: widget 的大小改变
  • 显示和隐藏事件: widget 显示和隐藏
  • 窗口事件: 窗口是否为当前窗口

QT 将系统产生的消息转化为 QT 事件,QT 事件被封装为对象,所有的 QT 事件均继承抽象类 QEvent,用于描述程序内部或外部发生的动作。

2.QT事件的产生

  • 用户操作产生事件被操作系统给捕获,比如:键盘按钮,鼠标按键,鼠标滚轮产生对应的事件。
  • 操作系统捕获事件放进消息队列中
  • QtGUI应用程序检测到相应的事件,从内核中获取事件,并将事件封装为QEvent 分发到相应的QWidget对象。
  • 相应的 QWidget 中的 event(QEvent *)进行事件处理会对事件进行处理
  • event(QEvent *)会根据事件类型调用不同 的事件处理函数。
  • 在事件处理函数中发送 QT 预定义的信号,最终调用信号关联的槽函数

3.事件处理函数

 Qt 提供的事件处理器函数都是回调函数,也就是说作为使用者我们只需要指定函数的处理动作,关于函数的调用是不需要操心的,当某个事件被触发,Qt 框架会调用对应的事件处理器函数

如何查找事件处理函数?

进入帮助文档。 

在Protected Function中,只要函数名后缀带有Event都是事件处理函数

3.1鼠标事件

//当当鼠标左键、鼠标右键、鼠标中键被按下,该函数被自动调用
//通过参数可以得到当前按下的是哪个鼠标键
[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event);

//当鼠标左键、鼠标右键、鼠标中键被释放,该函数被自动调用,
//通过参数可以得到当前释放的是哪个鼠标键
[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event);

//鼠标移动事件
//当鼠标移动(也可以按住一个或多个鼠标键移动),该函数被自动调用
//通过参数可以得到在移动过程中哪些鼠标键被按下了。
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event);

//当鼠标双击该函数被调用,通过参数可以得到哪一鼠标键进行双击
[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event);

//当鼠标进入窗口的一瞬间,触发该事件,注意:只在进入的瞬间触发一次该事件
[virtual protected] void QWidget::enterEvent(QEvent *event);

//当鼠标离开窗口的一瞬间,触发该事件,注意:只在离开的瞬间触发一次该事件
[virtual protected] void QWidget::leaveEvent(QEvent *event);

3.2键盘事件

//当键盘上的按键被按下了,该函数被自动调用,通过参数可以得知按下的是哪个键
[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event);

//当键盘上的按键被释放了,该函数被自动调用,通过参数可以得知释放的是哪个键。
[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event);

3.3窗口重绘事件

[virtual protected] void QWidget::paintEvent(QPaintEvent *event);

当窗口刷新时,该窗口会被自动调用。比如:

  • 窗口大小变化
  • 窗口隐藏了,窗口显示出来
  • 调用update()函数

3.4窗口关闭事件

[virtual protected] void QWidget::closeEvent(QCloseEvent *event);

当窗口标题栏的关闭按钮被按下并且在窗口关闭之前该函数被调用,可以通过该函数控制窗口是否被关闭。

3.5窗口大小变化事件

[virtual protected] void QWidget::resizeEvent(QResizeEvent *event);

当窗口的大小发生变化,该函数被调用。

4. 重写事件处理函数

Qt自带事件处理函数都有默认处理动作,如果我们不想使用事件处理函数函数默认动作,我们可以

自定义该事件的处理动作。

步骤:

  1. 自定义一个窗口类,继承某个窗口类
  2. 在自定义窗口类重写事件处理函数即可
 

示例:

  • 窗口大小变化是,高度和宽度的值.
  • 窗口移动时,坐标中的值也发生变化。

 

//重写resizeEvent和moveEvent事件

void MainWindow::resizeEvent(QResizeEvent*)
{
    geoUpdate();
}


  void MainWindow::moveEvent(QMoveEvent*)
  {
      geoUpdate();
  }

 void MainWindow::geoUpdate()
 {
     //获取位置信息
     //geometry()函数是QWidet中公共成员函数
     //它获取的是窗口的左上标的位置,以及窗口的宽度,高度
     QRect rect=geometry();
     QString x=QString::number(rect.x());
     QString y=QString::number(rect.y());

     QString height=QString::number(rect.height());
     QString width=QString::number(rect.width());

     ui->coordiante_line->setText("( "+x+","+y+" )");
     ui->heigth_line->setText(height);
     ui->wid_line->setText(width);
 }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据质量管理之ETL中的挑战与解决方案

摘要:在数据驱动的时代,数据质量管理是企业成功的关键因素之一。在ETL(Extract, Transform, Load)过程中,数据质量问题可能会导致数据失真、决策错误和业务损失。本文将探讨ETL中常见的数据质量挑战,并提供…

CSS入门.

目录 基础入门基础语法 1.基础入门 什么是 CSS CSS 指层叠样式表(Cascading Style Sheets)样式通常存储在样式表中 为什么要使用 CSS 样式定义如何显示 HTML 元素为了解决内容与表现分离的问题主要目的:可以让相同的一个页面在不同的浏…

linux服务配置ssh免密

一、常用场景 1、我们经常使用scp命令在两台不同服务器之间进行文件传输,但每执行一次scp命令时,都需要输入一次密码;使用ssh命令远程连接另一台服务器时,也需要输入密码。频繁输入密码比较麻烦,ssh可帮助我们在两台服…

【python】array数组添加一行或一列数据

目录 0.环境 1.背景 2.具体实现 2.1思路 2.2具体实现 2.2.1 增加一列 2.2.2增加一行 3. 完整代码 0.环境 windows jupyter notebook跑代码 1.背景 在实现数据可视化的时候,用了numpy的array类型的数组,需要手动在最后增加一列数据,所以…

[oeasy]python0071_字符串类型_str_string_下标运算符_中括号

帮助手册 回忆上次内容 上次 分辨了 静态类型 语言动态类型 语言 python 属于 对类型要求 没有那么严格的 动态类型 语言 对 初学者很友好不过很多时候 也容易 弄不清变量类型 直接 修改代码 增强 程序的可读性把变量的类型 明确标记在 变量名上 就像 把缩进 作为程序块的分…

VisualSVN Server安装步骤

一.下载 官网:VisualSVN - Subversion-based version control for Windows 二.安装 双击安装 先创建好文件夹路径,建议放在同一个根目录下 三.安装成功,运行打开界面如图 四.创建项目 右键Repositories 选择Customize pemissions&#xff0…

浅拷贝、深拷贝、引用拷贝

目录 1.浅拷贝 2.深拷贝 3.引用拷贝 4.代码示例 5.总结 浅拷贝、深拷贝和引用拷贝是在编程中用来 复制对象或数据 的三种不同方式。 1.浅拷贝 浅拷贝(Shallow Copy):浅拷贝创建一个新对象,其中包含原始对象的引用。这意…

Oracle数据类型与表管理

Oracle数据类型与表管理 前言 1、Oracle数据类型 2、 建表 3、表删除 4、表的修改 1、Oracle数据类型 2、 建表 Create table 表名( 字段 1 数据类型 [default 默认值], 字段 2 数据类型 [default 默认值], … 字段 n 数据类型 [default 默认值] ) -…

d3dx9_30.dll丢失怎么解决

在解决d3dx9_30.dll丢失问题之前,我们首先需要了解d3dx9_30.dll的作用。d3dx9_30.dll是DirectX的一个核心文件,它提供了许多与图形和多媒体相关的函数和特性。它在许多游戏和图形应用程序中被广泛使用。 d3dx9_30.dll丢失的解决方法 打开计算机电脑浏览…

selenium自动化测试之八种定位元素方法

目录 八大定位方法 id定位 name定位 tag定位 class定位 link_text定位 partial_link定位 xpath定位 Css_selector定位 总结: 自动化最基础的就属于定位元素了,元素不会定位,基本上已经团灭了,就不用再去考虑什么自动化了…

9.12UEC++日志输出

1. 调用:GEngine; 2.TEXT宏: 3. Vs使用: 演示: 日志文件夹: 自定义日志: 声明: 定义:

力扣 51. N 皇后

题目来源&#xff1a;https://leetcode.cn/problems/n-queens/description/ C题解1&#xff1a;回溯法。用一个vector<vector<int>> qmap(n, vector<int>(n, 0))标记后面行不能使用的位置&#xff0c;每次递归下一层为下一行的位置&#xff0c;直到达到n行&a…

html案例2

效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initia…

【mysql实践】如何查看阿里云RDS的MySQL库中的binlog日志

背景&#xff1a; 工作中我们为了查看MySQL中数据修改的历史记录时&#xff0c;会通过查看binlog日志。但由于binlog日志是二进制文件&#xff0c;需要解析之后&#xff0c;才能用文本查看工具打开。这次笔者使用flink进行实时统计时就多次遇到了这个问题。经常看笔者最近博客…

redis的分布式事务-redisson

一 redisson 1.1 redisson分布式事务 Redisson分布式锁是一种基于redis实现的分布式锁&#xff0c;它利用redis的setnx命令实现分布式锁的互斥访问。同时还支持锁的自动续期功能&#xff0c;可以避免因为某个进程崩溃或者网络故障导致锁无法释放的情况。 只要线程一加锁成功…

常见面试题之类加载器

1. 什么是类加载器&#xff0c;类加载器有哪些&#xff1f; 要想理解类加载器的话&#xff0c;务必要先清楚对于一个Java文件&#xff0c;它从编译到执行的整个过程。 类加载器&#xff1a;用于装载字节码文件(.class文件)运行时数据区&#xff1a;用于分配存储空间执行引擎&a…

八 、HTML表单

1、表单 三层架构 数据访问层 响应业务逻辑层的请求 与物理数据库交互 业务逻辑层 响应表示层的请求 与数据访问层交互 完成特定的业务逻辑约束 表示层 显示信息 收集信息&#xff08;与业务逻辑层交互&#xff09; HTML显示信息 基本标签&#xff1a;行内元素、块级元素 HT…

Java 设计模式——策略模式

目录 1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK 源码解析——Comparator 1.概述 &#xff08;1&#xff09;先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 &#xff08;2&#xff09;策略…

【计算机网络】网络编程套接字(二)

文章目录 网络编程套接字&#xff08;二&#xff09;简单TCP服务器实现创建套接字服务器绑定服务器监听服务器接收连接服务器处理请求 简单TCP客户端实现创建套接字客户端发起连接客户端发起请求 服务器简单测试服务器简单测评多进程版TCP服务器捕捉SIGCHLD信号孙子进程提供服务…

如何使用ai绘画生成器创造出惊人的作品

你们了解如何文字生图片吗&#xff0c;简单的来说就是用文字描述出图片的样子&#xff0c;然后通过ai技术生成出来。 这种技术现在应用的很广泛&#xff0c;在各行各业都有在使用&#xff0c;平常我无聊的时候&#xff0c;就靠它为我打磨时间了。 不过现在的ai绘画工具有很多…