【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

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

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

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

相关文章

Jenkins触发器--在其他项目执行后构建

前言: jenkins中有多种触发器可用,可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释: Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…

OpenStack 网络服务的插件架构

OpenStack 的网络服务具有灵活的插件架构,可支持多种不同类型的插件以满足不同的网络需求。以下是对 OpenStack 网络服务插件架构中一些常见插件类型的介绍: 一、SDN 插件 Neutron 与 SDN 的集成:在 OpenStack 网络服务里,SDN 插…

牛客网刷题 ——C语言初阶(6指针)——BC105 矩阵相等判定

1. 题目描述:BC105 矩阵相等判定 牛客网OJ题链接 描述: KiKi得到了两个n行m列的矩阵,他想知道两个矩阵是否相等,请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。 示例1 输入: 2 2 1 2 3 4 1 2 3 4 输出…

SQLAlchemy

https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里,我们定义模块级构造,这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射,它同时定…

[SMARTFORMS] 导出SMARTFORMS表单数据

当我们配置好了Smartforms表单以后,如何在自开发的ALV程序报表中以PDF格式导出表单数据到电脑本地? 效果图 选择需要进行导出的采购凭证编号行数据,点击PDF格式导出按钮,弹出导出数据的信息窗口,点击"允许"…

seo泛目录(seo泛目录程序)

导言: 在搜索引擎优化(SEO)的领域中,泛目录程序被广泛应用于提升网站的可见性和排名。本文将深入探讨SEO泛目录程序的概念和作用,重点介绍它在网站优化中的重要性和优势,帮助读者了解SEO泛目录程序的工作原…

Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】

故事桥(Story Bridge)位于澳大利亚布里斯班,建造于1940年,全长777米,横跨布里斯班河,可载汽车、自行车和行人往返于布里斯班的北部和南部郊区。故事桥是澳大利亚最长的悬臂桥,是全世界两座手工建…

[人工智能自学] Python包学习-pandas

紧接上篇numpy的学习教程 本篇参考: Pandas 教程|菜鸟教程 官方教程 - 10分钟入门pandas joyful-pandas pandas中文教程 它建立在 NumPy 库的基础之上,提供了高效的数据结构和数据分析工具,使得在 Python 中进行数据操作变得更加容易和高效。…

【2024年华为OD机试】 (A卷,100分)- 二元组个数(Java JS PythonC/C++)

一、问题描述 以下是题目描述的 Markdown 格式: 题目描述 给定两个数组 a 和 b,若 a[i] b[j],则称 [i, j] 为一个二元组。求在给定的两个数组中,二元组的个数。 输入描述 第一行输入 m,表示第一个数组的长度。第二…

数据结构与算法之二叉树: LeetCode 543. 二叉树的直径 (Ts版)

二叉树的直径 https://leetcode.cn/problems/diameter-of-binary-tree/description/ 描述 给你一棵二叉树的根节点,返回该树的 直径 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 两节点之间路径的 长度 …

C# OpenCV机器视觉:OCR产品序列号识别

在一个看似平常却又暗藏玄机的工作日,阿明正坐在办公室里,对着堆积如山的文件唉声叹气。突然,电话铃声如炸雷般响起,吓得他差点从椅子上摔下来。原来是公司老板打来的紧急电话:“阿明啊,咱们刚生产出来的那…

【Powershell】Windows大法powershell好(二)

PowerShell基础(二) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…

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

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

WPF系列八:图形控件Path

简介 Path控件支持一种称为路径迷你语言(Path Mini-Language)的紧凑字符串格式,用于描述复杂的几何图形。这种语言通过一系列命令字母和坐标来定义路径上的点和线段,最终绘制出想要的图形。 绘制任意形状:可以用来绘…

基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类首地址

文章目录 基类指针指向派生类对象&#xff0c;基类指针的首地址永远指向子类从基类继承的基类起始地址。代码代码2 基类指针指向派生类对象&#xff0c;基类指针的首地址永远指向子类从基类继承的基类起始地址。 代码 #include <iostream> using namespace std;class b…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

antd-design-vue1.7.8浏览器中使用

快速开始 引入js和css <link href"antd/antd.css" rel"stylesheet"> <script src"vue2/vue.js" type"text/javascript"></script> <script src"antd/antd.js" type"text/javascript">&…

SQL美化器优化

文章目录 1.目录2.代码 1.目录 2.代码 package com.sunxiansheng.mybatis.plus.inteceptor;import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.*; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.*…

【前端】【HTML】入门基础知识

参考视频&#xff1a;【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>&#xff1a;一级标题&#xff0c;通常用于页面的主标题&#xff0c;字体较大且醒目。 <h2>&#xff1a;二级标题&#xff0c;用于副标题或主要章节标…

游戏引擎学习第78天

Blackboard: Position ! Collision “网格” 昨天想到的一个点&#xff0c;可能本来就应该想到&#xff0c;但有时反而不立即思考这些问题也能带来一些好处。节目是周期性的&#xff0c;每天不需要全程关注&#xff0c;通常只是在晚上思考&#xff0c;因此有时我们可能不能那么…