【Qt】事件、qt文件

目录

Qt事件

QEvent

QMouseEvent

QWheelEvent

QKeyEvent

QTimerEvent

Qt文件

QFile

QFileInfo


Qt事件

在Qt中用一个对象表示一个事件,这些事件对象都继承自抽象类QEvent。事件和信号的目的是一样的,都是为了响应用户的操作。有两种产生事件的方式:1.当用户进行某些操作,如:点击鼠标、按下键盘中的按键等操作都会产生相应的事件。2.系统本身产生事件,如:定时器。当事件产生时对应的事件处理函数就会被执行到,可以这样认为:事件是信号的底层。用户的某些操作qt中没有提供对应的信号,此时就无法连接信号槽,因此就要用到事件,通过在子类(继承自Qt中已有的类)中重写事件处理函数的方式响应用户的操作,事件产生后,就会通过多态的机制调用执行子类中重写的事件处理函数。

QEvent

enterEvent(当鼠标光标进入某控件时产生)

leaveEvent(当鼠标光标离开某控件时产生)

例子:

在窗口中创建一个标签控件,当鼠标进入或离开该标签控件范围会产生相应的事件,从而执行重写的事件处理函数,观察结果。

我们先创建一个继承自QLabel的子类,然后才能重写QLabel对应的信号处理函数。

当创建了继承自QLabel的子类后,在子类中重写对应的事件处理函数:

通过纯代码的方式在窗口中创建子类标签

通过Qt Designer图形化方式创建子类标签

拖拽一个标签控件到主窗口中,然后选中标签,点击鼠标右键,点击提升为。

 运行程序和上面通过纯代码方式创建子类标签的结果相同。

我们也可以在Widget类中重写enterEvent和leaveEvent实现当鼠标离开窗口时,执行对应的事件处理函数。

也可以将上面的规则运用到其他类型的控件中去,都是通过先创建某控件的子类然后在类中重写某些事件处理函数。

QMouseEvent

mousePressEvent(当在某控件中按下鼠标键时产生)

mouseReleaseEvent(当在某控件中释放鼠标键时产生)

mouseDoubleEvent(当在某控件中双击鼠标键时产生)

事件处理函数里的QMouseEvent类型参数对象提供了此时鼠标的一些属性,比如:事件产生后鼠标此时的位置,按下的是鼠标的左键还是右键等。

可以观察到双击鼠标右键也会产生按下鼠标键事件和释放鼠标键事件。

mouseMoveEvent(当中某控件中鼠标光标移动时产生)

Qt为了保证保证程序的流畅性,默认是关闭了鼠标移动追踪,产生鼠标移动事件时不会调用mouseMoveEvent方法,除非显示设置开启鼠标移动追踪。当移动鼠标时会产生大量鼠标事件,会导致程序不流畅,因此当我们真的需要鼠标移动追踪时开启即可。

QWheelEvent

wheelEvent(当滑动鼠标滚轮时发出)

例子:

用一个变量记录在按钮控件中鼠标的滚轮滑动的总距离

QKeyEvent

keyPressEvent(当按下键盘中的按键时产生)

查找按键事件中所有按键类型(键盘中的所有按键都有,是一个枚举类型):

例子:

在窗口中按下A按键打印条信息,点击窗口中的按钮创建一个对话框,在对话框中按下A按键打印另一条信息。

注意:如果想要产生窗口的按下按键事件,必须先选中窗口,然后按键盘键;如果想要产生对话框的按下按键事件,必须先选中对话框,然后按键盘键。

QTimerEvent

timerEvent(当经过一段定时器周期产生)

QTimer和QTimerEvent

一个qt程序中可以启动多个定时器,因此每个定时器都有它对应的id号。

QTimer是一个定时器控件类,要通过创建一个定时器对象才可以使用,提供更高层次的方法,可以使用信号槽。可以通过QTimer对应的方法获取定时器的id号、启动、关闭定时器。

QTimerEvent是一个定时器事件类,无需创建定时器对象,在使用时通过int startTimer(int msec)方法启动定时器。

该方法的返回值是定时器的id号:

例子:

启动两个定时器,一个用于在标签一,每1s标签中的数字加1;一个用于标签二,每2s标签中的数字加1

 

Qt文件

文件操作是应用程序必不可少的部分。qt作为一个通用开发库,提供了跨平台的文件操作能力。

qt提供了很多关于文件操作的类。

qt中的文件类

qt中的文件读写的类是QFile。QFile继承自QFileDevice,QFile的继承自QIODevice,QIODevice继承自QObject。

QIODevice是所有输入输出设备的基础类,I/O设备是能输入和输出数据的设备,如:文件就是一个I/O设备,网络通信中的套接字socket也是一个输入输出设备。

QFile:用于文件操作和文件数据读写的类。

QSaveFile:用于安全保存文件数据的类,向文件中写入数据时,会先将要写入的数据写到一个临时文件中,如果写入过程中出错,不会将临时文件的数据拷贝覆盖到目标文件中,如果写入过程没有出错,则将临时文件中的数据拷贝到目标文件中。

QTemporaryFile:用于创建临时文件的类,当QTemporary类对象销毁时,创建的临时文件也会自动销毁。

QFile

QFile类对文件进行操作的相关方法:

构造QFile类对象

打开文件

从文件中读取数据

向文件中写入数据

关闭文件

例子:

在主窗口中创建两个菜单一个用于读取文件,一个用于保存文件,创建一个文本输入框作为中心控件,将读取到的文件内容显示到文本输入框中;将文本输入框中的内容保存到要保存的文件中

在使用QFile中的write(const QByteArray& byteArray) 方法时传入的时QByteArray类型参数,QString类中有将QString类型转化为QByteArray类型的方法:

如果要保存不存在的文件,则调用QFile中的open方法时传入的实参是QFile::NewOliy

QFileInfo

用于获取文件和目录信息的类,比如:文件名、文件大小、文件后缀、文件路径、文件创建时间,最近访问时间,最近修改时间等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线形回归与小批量梯度下降实例

1、准备数据集 import numpy as np import matplotlib.pyplot as pltfrom torch.utils.data import DataLoader from torch.utils.data import TensorDataset######################################################################### #################准备若干个随机的x和…

消息队列使用中防止消息丢失的实战指南

消息队列使用中防止消息丢失的实战指南 在分布式系统架构里,消息队列起着举足轻重的作用,它异步解耦各个业务模块,提升系统整体的吞吐量与响应速度。但消息丢失问题,犹如一颗不定时炸弹,随时可能破坏系统的数据一致性…

【优选算法篇】:深入浅出位运算--性能优化的利器

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:优选算法篇–CSDN博客 文章目录 一.位运算一.位运算概述二.常见的位运算操作符三.常见的位运…

创业AI Agents系统深度解析

Agents 近日,AI领域的知名公司Anthropic发布了一份题为《构建高效的智能代理》的报告。该报告基于Anthropic过去一年与多个团队合作构建大语言模型(LLM)智能代理系统的经验,为开发者及对该领域感兴趣的人士提供了宝贵的洞见。本文…

【Spring Boot】Spring 事务探秘:核心机制与应用场景解析

前言 🌟🌟本期讲解关于spring 事务介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话不多说直…

centos7.6 安装nginx 1.21.3与配置ssl

1 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2 下载Nginx wget http://nginx.org/download/nginx-1.21.3.tar.gz3 安装目录 mkdir -p /data/apps/nginx4 安装 4.1 创建用户 创建用户nginx使用的nginx用户。 #添加www组 # groupa…

夯实前端基础之HTML篇

知识点概览 HTML部分 1. DOM和BOM有什么区别? DOM(Document Object Model) 当网页被加载时,浏览器会创建页面的对象文档模型,HTML DOM 模型被结构化为对象树 用途: 主要用于网页内容的动态修改和交互&…

Elasticsearch:向量数据库基础设施类别的兴衰

过去几年,我一直在观察嵌入技术如何从大型科技公司的 “秘密武器” 转变为日常开发人员工具。接下来发生的事情 —— 向量数据库淘金热、RAG 炒作周期以及最终的修正 —— 教会了我们关于新技术如何在更广泛的生态系统中找到一席之地的宝贵经验。 更多有关向量搜索…

【华为云开发者学堂】基于华为云 CodeArts CCE 开发微服务电商平台

实验目的 通过完成本实验,在 CodeArts 平台完成基于微服务的应用开发,构建和部署。 ● 理解微服务应用架构和微服务模块组件 ● 掌握 CCE 平台创建基于公共镜像的应用的操作 ● 掌握 CodeArts 平台编译构建微服务应用的操作 ● 掌握 CodeArts 平台部署微…

计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)

一、项目介绍 需求分析: (1)总部和分部要求网络拓扑简单,方便维护,网络有扩展和冗余性; (2)总部分财务部,人事部,工程部,技术部,提供…

【C++入门】详解合集

目录 💕1.C中main函数内部———变量的访问顺序 💕2.命名空间域 namespace 💕3.命名空间域(代码示例)(不要跳) 💕4.多个命名空间域的内部重名 💕5.命名空间域的展开 …

预编译SQL

预编译SQL 预编译SQL是指在数据库应用程序中,SQL语句在执行之前已经通过某种机制(如预编译器)进行了解析、优化和准备,使得实际执行时可以直接使用优化后的执行计划,而不需要每次都重新解析和编译。这么说可能有一些抽…

qemu搭建虚拟的aarch64环境开发ebpf

一、背景 需求在嵌入式环境下进行交叉编译,学习ebpf相关技术,所以想搭建一个不依赖硬件环境的学习环境。 本文使用的环境版本: 宿主机: Ubuntu24.02 libbpf-bootstrap源码: https://github.com/libbpf/libbpf-boots…

深度学习从入门到实战——卷积神经网络原理解析及其应用

卷积神经网络CNN 卷积神经网络前言卷积神经网络卷积的填充方式卷积原理展示卷积计算量公式卷积核输出的大小计算感受野池化自适应均值化空洞卷积经典卷积神经网络参考 卷积神经网络 前言 为什么要使用卷积神经网络呢? 首先传统的MLP的有什么问题呢? - …

2015年西部数学奥林匹克几何试题

2015/G1 圆 ω 1 \omega_1 ω1​ 与圆 ω 2 \omega_2 ω2​ 内切于点 T T T. M M M, N N N 是圆 ω 1 \omega_1 ω1​ 上不同于 T T T 的不同两点. 圆 ω 2 \omega_2 ω2​ 的两条弦 A B AB AB, C D CD CD 分别过 M M M, N N N. 证明: 若线段 A C AC AC, B D BD …

《Spring Framework实战》14:4.1.4.5.自动装配合作者

欢迎观看《Spring Framework实战》视频教程 自动装配合作者 Spring容器可以自动连接协作bean之间的关系。您可以通过检查ApplicationContext的内容,让Spring自动为您的bean解析协作者(其他bean)。自动装配具有以下优点: 自动装配…

JVM之垃圾回收器概述(续)的详细解析

ParNew(并行) Par 是 Parallel 并行的缩写,New 是只能处理的是新生代 并行垃圾收集器在串行垃圾收集器的基础之上做了改进,采用复制算法,将单线程改为了多线程进行垃圾回收,可以缩短垃圾回收的时间 对于其他的行为(…

有一台服务器可以做哪些很酷的事情

有一台服务器可以做哪些很酷的事情 今天我也来简单分享一下,这几年来,我用云服务器做了哪些有趣的事情。 服务器推荐 1. 个人博客 拥有个人服务器,你可以完全掌控自己的网站或博客。 与使用第三方托管平台相比,你能自由选择网站…

灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设

项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程,该灌区覆盖广阔,灌溉面积高达7.5万亩,地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设,强力推动节水灌溉措施的实施,旨在显著提升农业用水的…

3.flask蓝图使用

构建一个目录结构 user_oper.py from flask import Blueprint, request, session, redirect, render_template import functools # 创建蓝图 user Blueprint(xkj, __name__)DATA_DICT {1: {"name": "张三", "age": 22, "gender": …