【Qt】事件

server/2025/1/24 20:44:06/

事件

  • 事件的处理
  • 鼠标事件
  • 键盘事件
  • 定时器
  • 窗口事件

用户进行的各种操作,就会产生事件。给事件关联上函数或处理逻辑,当事件触发时,就能执行对应的代码。多数场景下,程序和用户的交互可以通过 “信号槽” 完成,但在某些特殊场景下需要通过重写事件处理函数的形式,来手动处理事件的响应逻辑。
Qt 中包含的事件有 鼠标事件、键盘事件、时间器事件、拖拽事件、输入事件等。

事件的处理

让一段代码和某个事件关联起来,当事件触发的时候,就能指定到这段代码,具体来说,就是让当前的类,重写某个事件处理函数。(这里使用到的就是 多态 机制,创建子类,继承自 Qt 已有的类,在子类中重写父类的事件处理函数,当事件触发时,就会通过多态这样的机制,执行子类重写的函数)

鼠标事件

此处通过一个简单例子来快速认识事件及处理:
创建好项目后,在项目中创建一个 Label 控件,当鼠标移动到这个控件上,则输出鼠标进入,当鼠标离开时,则输出鼠标离开。

先创建一个C++文件(创建项目过程及创建Label控件不做演示):
此文件继承 QLabel,重写 enterEvent 和 leaveEvent,当触发事件时,则会执行子类重写的函数:
在这里插入图片描述
在这里插入图片描述

将我们从左侧拖拽过来的 QLabel 控件,右键提升为我们自定义的 label:
在这里插入图片描述

提升的类名称为上面创建的类名,注意不要拼错:

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

label.h:

#ifndef LABEL_H
#define LABEL_H#include <QLabel>
#include <QWidget>class Label : public QLabel
{Q_OBJECT
public:Label(QWidget* parent);//重写父类函数void enterEvent(QEvent* event);void leaveEvent(QEvent* event);
};#endif // LABEL_H

label.cpp:

#include "label.h"
#include <QDebug>
Label::Label(QWidget* parent) : QLabel(parent)
{}void Label::enterEvent(QEvent *event)
{qDebug() << "鼠标进入";
}void Label::leaveEvent(QEvent *event)
{qDebug() << "鼠标离开";
}

鼠标点击事件:

在这里插入图片描述

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

鼠标释放事件:

在这里插入图片描述

鼠标双击事件:

在这里插入图片描述

鼠标移动事件: 在默认情况下,Qt 不会对鼠标移动进行追踪,因为鼠标随便动一下就会产生大量鼠标移动事件,造成卡顿,除非明确要求追踪鼠标位置。

在这里插入图片描述

滚轮事件:
在这里插入图片描述

键盘事件

在这里插入图片描述

定时器

在这里插入图片描述

窗口事件

窗口移动和缩放:
在这里插入图片描述


http://www.ppmy.cn/server/161106.html

相关文章

《罗宾逊-旅途VR》Build2108907官方学习版

《罗宾逊-旅途VR》官方版 https://pan.xunlei.com/s/VODiY5gn_fNxKREdVRdwVboCA1?pwdsh3f# 从第一人称的角度进行探索&#xff0c;玩家将遇到一系列恐龙和生物&#xff0c;这些恐龙和生物会对它们在泰森三世生态系统中的存在做出反应。强调与周围环境的互动&#xff0c;鼓励玩…

Selenium-WEB自动化测试环境配置

Selenium-WEB-Python-Mac开发环境 一、安装selenium 打开终端 ->pip安装&#xff08;安装命令&#xff1a;pip3 install selenium&#xff09; 安装成功后&#xff0c;可以通过&#xff08; pip3 show selenium &#xff09;命令查看安装的selenium版本信息 二、安装浏览…

【Pytest】结构介绍

1.目录结构介绍 project_root/ │ ├── tests/ # 测试用例存放目录 │ ├── __init__.py │ ├── test_module1.py │ ├── module1.py # 被测试的模块 ├── conftest.py # pytest配置文件&#xff0c;可定义fixture和钩子函数 ├── py…

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议&#xff0c;用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接&#xff0c;这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发&#xff0c;并于2…

mac 通过 Homebrew 安装 git 遇到的问题

问题真多啊 &#xff01;&#xff01;&#xff01; 解决方式 见 1. / 2. / 3 . / 4. / 5. remote: Enumerating objects: 290323, done. remote: Counting objects: 100% (473/473), done. remote: Compressing objects: 100% (253/253), done. error: RPC failed; curl 92 H…

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展

DeepSeek-R1&#xff1a;性能对标 OpenAI&#xff0c;开源助力 AI 生态发展 在人工智能领域&#xff0c;大模型的竞争一直备受关注。最近&#xff0c;DeepSeek 团队发布了 DeepSeek-R1 模型&#xff0c;并开源了模型权重&#xff0c;这一举动无疑为 AI 领域带来了新的活力。今…

C++函数——fill

在C中&#xff0c;std::fill 是标准库提供的一个算法适用于几乎所有类型的容器&#xff0c;只要这些容器支持迭代器操作。具体来说&#xff0c;std::fill 的适用性取决于容器是否提供了满足其要求的迭代器类型&#xff0c;用于将指定范围内的所有元素设置为某个特定值。它是一个…

Wireshark TS | 虚假的 TCP Spurious Retransmission

前言 在写《TCP Analysis Flags 系列》文章时梳理出不少有趣的案例&#xff0c;当然过程当中也有很多的疑问&#xff0c;嗯&#xff0c;自得其乐。考虑到不同的系列偏重不太一样&#xff0c;因此在 TroubleShooting 系列中我再把有些案例单独展开说说。 问题背景 TCP Spurio…