【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

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

相关推荐
五行星辰1 小时前
Servlet与JSP:Java的秘密花园入口
java·开发语言·servlet
代码驿站5201 小时前
Scala语言的软件工程
开发语言·后端·golang
Code花园1 小时前
Objective-C语言的多线程编程
开发语言·后端·golang
Rverdoser2 小时前
接口项目架构流程图-thinkphp6-rabbitmq
开发语言·microsoft·ruby
Jelena技术达人2 小时前
利用 Python 爬虫获取 1688 关键字 API 接口
开发语言·爬虫·python
graceyun2 小时前
C语言初阶习题【23】输出数组的前5项之和
c语言·开发语言·算法
睡眼红瞳3 小时前
QT转到槽报错The class containing “Ui::MainWindow“ could not be found in...
qt
喵手3 小时前
Java中将特征向量转换为矩阵的实现
java·开发语言·矩阵
晚安~~3 小时前
协同过滤算法商品推荐系统|Java|SpringBoot|VUE|
java·开发语言·maven
Xiao Xiangζั͡ޓއއ4 小时前
于交错的路径间:分支结构与逻辑判断的思维协奏
c语言·开发语言·程序人生·学习方法·改行学it